J'ai un script qui définit toutes les variables nécessaires à la compilation croisée. En voici une partie:
export CONFIG_SITE=~/workspace/eldk-5.4/powerpc/site-config-powerpc-linux
export CC="powerpc-linux-gcc -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export CXX="powerpc-linux-g++ -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export CPP="powerpc-linux-gcc -E -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export AS="powerpc-linux-as "
export LD="powerpc-linux-ld --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export GDB=powerpc-linux-gdb
Si je fais source environment-setup-powerpc-linux
, toutes les variables d'environnement sont importées dans la session Shell actuelle, et je peux compiler mon exemple.
Est-il possible d'importer ces variables dans cmake? Si oui, comment?
Un peu plus de détails:
En lisant cmake quick start , vous pouvez spécifier une variable sur une ligne de commande:
cmake -DVARIABLE1=value1 -DVARIABLE2=value2 ...
Sinon, la commande set
dans le script cmake est probablement ce que vous voulez, voir manuel de référence . Pour définir la variable d'environnement PATH, procédez comme suit:
set(ENV{PATH} "/home/martink")
Pour définir une variable normale, procédez comme suit:
set(variable "value")
Je ne sais pas lesquels vous devez définir, probablement ceux de l'environnement.
Cela dit, définir la variable d'environnement avant d'appeler cmake est souvent la solution la plus simple pour résoudre le problème, comme dans ce cas: https://stackoverflow.com/a/15053460/ 684229
La seule façon de définir un compilateur et des indicateurs pour effectuer une compilation croisée de manière fiable avec CMake est avec un fichier de chaîne d'outils comme cela est fait dans le tutoriel que vous avez trouvé.
Lorsque nous avons rencontré le même problème que vous (une boîte à outils qui produit un script afin de définir l'environnement de compilation), nous avons changé la boîte à outils de manière à produire un fichier de chaîne d'outils avec le script.
En réalité, un fichier cmake-toolchain ne change pas souvent. Les indicateurs de base utilisés pour la cible sont fixés assez tôt dans un projet - normalement. Et avec CMake's CMAKE_BUILD_TYPE
vous pouvez basculer entre les compilations de débogage et de publication sans modifier le fichier de la chaîne d'outils.
Si vous avez différentes cibles à prendre en charge, créez une chaîne d'outils différente et utilisez la génération hors source avec CMake.
EDIT : Une chose que vous pourriez faire est d'invoquer cmake avec l'argument -D en définissant les variables que vous voulez et en ayant sourced votre script avant:
source environment-setup-powerpc-linux
cmake -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX etc
Le résultat sera identique à l'utilisation d'un fichier de chaîne d'outils.