2012-05-11 10 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++) 

qui è quello che faccio ora crosscompilazione. Voglio aggiungere l'opzione per eseguirlo allo stesso modo che:opzione Passo a CMake per l'opzione futuro crosscompilazione (CROSS_COMPILE)

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

e se non lo faccio percorso CROSS_COMPILE a fare (non CMake) è necessario utilizzare impostazioni predefinite del sistema in modo percorso cmake must questa opzione per Makefile. Come posso farcela?

risposta

7

Buildroot genera un file toolchain CMake per te. A seconda del tuo Buildroot, potrebbe essere direttamente nella directory output o in output/host/usr/share/buildroot. Il file è denominato toolchainfile.cmake. Poi per costruire le applicazioni CMake, do:

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

Questo file contiene tutte le definizioni dei percorsi di cross-compilatore, variabili d'ambiente pkg-config, intestazioni e librerie posizione, ecc

+0

è nuovo per me e suona molto bene. – Cynede

2

Per il metodo più semplice, tale scopo:

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

Quando la variabile CROSS_COMPILE viene passato a fare, esso sarà sostituito con il percorso compilatore croce.

Ora, il modo corretto. Idealmente, la variabile CROSS_COMPILE deve essere definita quando viene eseguito CMake in quanto è destinato a essere multipiattaforma. L'utilizzo della prima soluzione potrebbe interrompersi se vengono utilizzati altri generatori CMake.

questo può essere fatto come:

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

indicare la variabile:

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

In questo caso, CMake genera file di generazione appropriati, in base al fatto CROSS_COMPILE è definita o no.

+0

Grazie, ma non è quello che voglio. e alcuni bug qui: ~/projects/buildroot/output/host/usr/bin/arm-linux-; g ++: Nessun file o directory – Cynede

+0

Voglio passare l'opzione CROSS_COMPILE per rendere (per makefile) – Cynede

+1

Ho modificato la risposta. Ma la prima opzione potrebbe ancora darti un errore di linker. CMake non dovrebbe usare cose specifiche del generatore come quello che stai cercando di fare. Passare la variabile del compilatore tramite make a un makefile generato da CMake non dovrebbe essere fatto. È necessario definire il cross compilatore quando si generano makefile tramite CMake. La seconda opzione dovrebbe funzionare ora. – panickal

Problemi correlati