2012-05-11 7 views
5
IF(UNIX) 
    # CROSS COMPILATION! ON/OFF 
    #SET(CMAKE_C_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-gcc) 
    #SET(CMAKE_CXX_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-g++) 
    #SET(CMAKE_C_COMPILER /home/username/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi-gcc) 
    #SET(CMAKE_CXX_COMPILER /home/username/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi-g++) 

esto es lo que hago ahora para la compilación cruzada. Quiero añadir la opción de ejecutarlo igual que:Opción de pase para cmake para la opción futura de crosscompilation (CROSS_COMPILE)

make CROSS_COMPILE=~/projects/buildroot/output/host/usr/bin/arm-linux- 

y si no lo hago CROSS_COMPILE camino para hacer (no CMAKE) se debe utilizar valores predeterminados del sistema por lo que cmake ruta obligada esta opción para Makefile. ¿Cómo puedo hacerlo?

Respuesta

7

Buildroot genera un archivo CMake toolchain para usted. Dependiendo de su Buildroot, podría estar directamente en el directorio output, o en output/host/usr/share/buildroot. El archivo se llama toolchainfile.cmake. A continuación, para construir sus aplicaciones CRealice, hacer:

cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/buildroot/output/host/usr/share/buildroot/toolchainfile.cmake

Este archivo contiene todas las definiciones de los caminos compilador cruzado, variables de entorno pkg-config, cabeceras y bibliotecas ubicación, etc.

+0

es nuevo para mí y suena muy bien. – Cynede

2

Para el método más simple, hacer esto:

SET(CMAKE_C_COMPILER $(CROSS_COMPILE)gcc) 
SET(CMAKE_CXX_COMPILER $(CROSS_COMPILE)g++) 

Cuando se pasa la variable CROSS_COMPILE hacer, será sustituido por el camino compilador cruzado.

Ahora, de la manera correcta. Idealmente, la variable CROSS_COMPILE se debe definir cuando se ejecuta CMake, ya que debe ser multiplataforma. Usar la primera solución podría romperse si se usan otros generadores CMake.

Esto se puede hacer como:

IF(UNIX) 
    SET(CMAKE_C_COMPILER ${CROSS_COMPILE}gcc) 
    SET(CMAKE_CXX_COMPILER ${CROSS_COMPILE}g++) 

a continuación, definir la variable:

cmake -G "Unix Makefiles" -DCROSS_COMPILE=~/projects/buildroot/output/host/usr/bin/arm-linux- 

En este caso, CMake generará ficheros de construcción adecuados, en función de si CROSS_COMPILE se define o no.

+0

Gracias, pero no es lo que quiero y algunos errores aquí: ~/projects/buildroot/output/host/usr/bin/arm-linux-; g ++: Ningún archivo o directorio – Cynede

+0

Quiero pasar la opción CROSS_COMPILE para hacer (a makefile) – Cynede

+1

Edité la respuesta. Pero la primera opción aún puede darle un error de enlazador. CMake no debe usar cosas específicas del generador como lo que estás tratando de hacer. No se debe hacer pasar la variable de compilación a través de make a un archivo MAKE generado. Debe definir el compilador cruzado al generar archivos make a través de CMake. La segunda opción debería funcionar ahora. – panickal

Cuestiones relacionadas