web-dev-qa-db-fra.com

cmake: définir des variables d'environnement à partir d'un script

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:

  1. J'utilise ELDK v 5.4 , et son script d'installation génère un script qui définit toutes les variables d'environnement
  2. J'ai trouvé ce tutoriel , qui explique comment configurer manuellement la compilation croisée, mais pas comment utiliser le script, qui définit tout
  3. si j'appelle le script avant de définir cmake, tout fonctionne bien et je peux effectuer une compilation croisée, mais j'aimerais que cmake appelle le script
34
BЈовић

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

69
TMS

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.

4
Patrick B.