Quando si utilizza CMake per la compilazione incrociata, in genere si specifica un file toolchain tramite l'opzione CMAKE_TOOLCHAIN_FILE
. In GNU terminology, è possibile specificare il set di strumenti dell'architettura host utilizzando questo file. Tuttavia, generalmente non ci si può aspettare di essere in grado di eseguire qualsiasi cosa creata con questa toolchain. Abbastanza spesso, alcuni strumenti di compilazione devono essere compilati per l'architettura di compilazione.Come istruire CMake a utilizzare il compilatore di architettura di compilazione?
Prendere in considerazione la seguente configurazione. Ho due file sorgente genfoo.c
e bar.c
. Durante la compilazione, è necessario compilare ed eseguire genfoo.c
. Il suo output deve essere scritto su foo.h
. Quindi posso compilare bar.c
, che è #include "foo.h"
. Poiché CMake utilizza per impostazione predefinita la toolchain dell'architettura host, le istruzioni per bar.c
sono facili. Ma come posso dire di usare l'architettura build toolchain per compilare genfoo.c
? Dire semplicemente add_executable(genfoo genfoo.c)
comporterà l'utilizzo del compilatore sbagliato.
Come hai affermato, nella terminologia GNU si userebbe il comando 'configure' per specificare l'architettura host. E dovresti eseguire 'configure' due volte se vuoi costruire per due diversi ambienti host. Quindi vedo due possibilità con CMake: utilizzare uno script di build che crea ed esegue i due ambienti necessari (vedere [qui] (http://stackoverflow.com/questions/30999130/cmake-build-multiple-targets-in-different- build-directory)) o utilizzare [ExternalProject_Add()] (https://cmake.org/cmake/help/v3.2/module/ExternalProject.html) e dividere il tuo CMakeLists.txt in sottoprogetti dedicati. – Florian
No, con gli autotools si usa semplicemente 'CC_FOR_BUILD'. Vedi 'ax_cc_for_build'. – Helmut
Ok, non lo sapevo. Se ho capito bene, stiamo parlando del caso d'uso descritto in [Compilazione CMake Cross: utilizzo degli eseguibili nella build creata durante la compilazione] (https://cmake.org/Wiki/CMake_Cross_Compiling#Using_executables_in_the_build_created_during_the_build)? – Florian