Red de conocimiento informático - Material del sitio web - Cómo usar CMake para compilación cruzada

Cómo usar CMake para compilación cruzada

configuración de compilación cruzada de cmake

Muchas veces, nos enfrentamos a plataformas integradas durante el desarrollo, por lo que debido a limitaciones de recursos, necesitamos utilizar una compilación cruzada relevante. Es decir, cree el programa de destino en su máquina host. Implica cambiar archivos de encabezado relacionados, seleccionar compiladores y cambiar variables de entorno. El autor solo presenta brevemente algunos preparativos que CMake debe hacer cuando se enfrenta a una compilación cruzada.

CMake ha reservado una variable CMAKE_TOOLCHAIN_FILE para compilación cruzada, que define la ruta de un archivo. Este archivo es toolChain, que contiene una serie de variables y atributos que debes modificar, incluidos C_COMPILER y CXX_COMPILER. Si usa Qt, entonces necesita modificar QT_QMAKER. Para evitar que los usuarios vuelvan a ingresar estos comandos cada vez que realizan una compilación cruzada, CMake trae el mecanismo toolChain. En resumen, es un script de cmake que incorpora todas las configuraciones que deben cambiarse y configurarse en el entorno de compilación cruzada. .

Varias variables importantes establecidas en el script toolChain

1.cmake_system_name:

El nombre de su sistema operativo de destino, por ejemplo, si su objetivo es ARM o Linux, debe escribir "Linux". Si su plataforma integrada no tiene un sistema operativo relacionado, debe escribir "Genérico". Solo después de configurar la variable CMAKE_SYSTEM_NAME, CMake pensará que la compilación cruzada está en progreso en este momento. y establezca la variable adicional CMAKE_CROSSCOMPILING en TRUE.

2.cmake_c_compiler:

2.C_COMPILER:

Como sugiere el nombre, compilador de C, aquí puede configurar la variable con la ruta completa o el nombre del archivo. , set La ventaja de ser una ruta completa es que CMake irá a esta ruta para encontrar otras herramientas relacionadas con la compilación, como enlazadores, binutils, etc. Si el nombre del archivo que escribe tiene un prefijo como arm-elf, CMake reconocerlo y ir al compilador. Si usa un prefijo como arm-elf al escribir sus archivos, CMake reconocerá y encontrará el compilador cruzado.

3. CMAKE_CXX_COMPILER:

Esto es lo mismo que el anterior y representa el compilador de C++.

4.CMAKE_FIND_ROOT_PATH:

Especifique una o más rutas de búsqueda que tengan prioridad sobre otras rutas de búsqueda. Por ejemplo, si configura /opt/arm/, entonces todos los Find_xxx.cmake priorizarán /usr/lib, /lib, etc. en esa ruta antes de ir a su propio /usr/lib y /lib. Si tiene algunas bibliotecas que no están incluidas en /opt/arm, también puede especificar varias bibliotecas en CMAKE_FIND_ROOT_PATH, por ejemplo:

set(CMAKE_FIND_ROOT_PATH /opt/arm /opt/inst)

Esta variable reubica efectivamente la ruta raíz de la búsqueda en la ubicación especificada. Esta variable está vacía de forma predeterminada. Esta variable es muy útil cuando se utiliza compilación cruzada: apunte esta variable al directorio raíz del entorno de destino y CMake buscará allí.

5.cmake_find_root_path_mode_program:

Actúa en FIND_PROGRAM(), tiene tres valores, NUNCA, SOLO y AMBOS. El primero significa que no buscará en su CMAKE_FIND_ROOT_PATH, el segundo Uno. significa que solo buscará en esta ruta, y el tercero significa que primero buscará en esta ruta y luego buscará en la ruta global. Para esta variable, generalmente se llamará al programa host, por lo que generalmente se establece en NUNCA

6 .CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:

Opciones relacionadas para FIND_LIBRARY() para indicar la biblioteca al vincular, por lo que solo es necesario configurarlas aquí para garantizar que nuestra biblioteca se encuentre en un entorno cruzado.

7. CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:

Para FIND_PATH() y FIND_FILE(), generalmente es SÓLO si desea cambiarlo, generalmente agrega y cambia local en el comando FIND correspondiente. Las opciones para configurar incluyen NO _CMAKE_FIND_ROOT_PATH, SOLAMENTE_CMAKE_FIND_ROOT_PATH, BOTH_CMAKE_FIND_ROOT_PATH

8.BOOST_ROOT:

Para los usuarios que necesitan la biblioteca BOOST, deben configurar la ruta relevante de la biblioteca boost. entonces la ruta aquí es la ruta de inicio en ARM, que incluye include y lib. qt_qmake_executable:

Aplicable a los usuarios de Qt que necesitan cambiar los comandos qmake relevantes para cambiar a la versión integrada, por lo que la ruta aquí debe especificarse como la ruta qmake correspondiente (especificada como el propio qmake)

demostración de toolChain

# Esto es obligatorio

SET(CMAKE_SYSTEM_NAME Linux)

# Especificar el compilador cruzado

SET ( CMAKE_C_COMPILER /opt /arm/usr/bin/ppc_74xx-gcc)

SET(CMAKE_CXX_COMPILER /opt/arm/usr/bin/ppc_74xx-g++)

# ¿Dónde está el objetivo? entorno

SET(CMAKE_FIND_ROOT_PATH /opt/arm/ppc_74xx /home/rickk/arm_inst)

# Buscar el programa en el directorio del host de compilación (no es necesario)

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )

#Establecer bibliotecas y archivos de encabezado en el directorio de destino

SET( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY SOLAMENTE)

SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE SOLAMENTE)

# Configurar Boost y Qt

# Configurar Boost y Qt

SET(QT_ QMAKE_EXECUTABLE /opt/qt-embedded/qmake)

SET( BOOST_ROOT /opt/boost_arm )

Esto completa la cadena de herramientas y le brinda la flexibilidad de elegir entre las versiones de consola y de desarrollo. La única diferencia entre los dos es la línea -DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake.

Aún mejor, si tiene muchos programas que deben transferirse, pero apuntan a la misma plataforma, puede simplemente escribir una copia de la cadena de herramientas y colocarla en un solo lugar, y todos los proyectos podrán usarla.