cmake: Establecer variables de entorno desde un script


Tengo un script que establece todas las variables necesarias para la compilación cruzada. Aquí es solo una parte de ella:

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 lo hago source environment-setup-powerpc-linux, todas las variables de entorno se importan en la sesión de shell actual, y puedo compilar mi ejemplo.

¿Es posible importar estas variables en cmake? Si es así, ¿cómo?


Un poco más de detalles:

  1. Estoy usando ELDK v 5.4, y su script de instalación genera un script que establece todo el entorno variables
  2. Encontré este tutorial , que explica cómo configurar manualmente la compilación cruzada, pero no cómo usar el script, que establece todo
  3. si llamo al script antes de configurar cmake, todo funciona bien, y puedo compilar de forma cruzada, pero me gustaría que cmake llame al script
Author: BЈовић, 2014-01-10

2 answers

Leyendo el cmake quick start , puede especificar la variable en una línea de comandos:

cmake -DVARIABLE1=value1 -DVARIABLE2=value2 ...

De lo contrario, el comando set en el script cmake es probablemente lo que desea, consulte el manual de referencia . Para establecer la variable de entorno PATH, haga lo siguiente:

set(ENV{PATH} "/home/martink")

Para establecer la variable normal, haga:

set(variable "value")

No estoy seguro de cuáles tiene que establecer, probablemente los del entorno.

Dicho esto, establecer la variable de entorno antes de llamar a cmake a menudo es la solución más fácil para resolver el problema, como en este caso: https://stackoverflow.com/a/15053460/684229

 55
Author: TMS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:23

La única manera de establecer un compilador y banderas para hacer compilación cruzada de manera confiable con CMake es con un archivo de cadena de herramientas como se hizo en el tutorial que ha encontrado.

Cuando nos enfrentamos al mismo problema que usted (un kit de herramientas que produce un script para establecer el entorno de compilación) cambiamos el kit de herramientas de una manera que produce un archivo de cadena de herramientas junto con el script.

En realidad un archivo cmake-toolchain-file no cambia tan a menudo. Las banderas básicas utilizadas para el objetivo se arreglan bastante temprano en un proyecto - normalmente. Y con CMake CMAKE_BUILD_TYPE puede cambiar entre las compilaciones de Depuración y Liberación sin cambiar el archivo de la cadena de herramientas.

Si tiene diferentes destinos para soportar, cree una cadena de herramientas diferente y use la compilación fuera de origen con CMake.

EDIT : Una cosa que podría hacer es invocar cmake con el argumento-D configurando las variables que desea y habiendo obtenido su script antes:

source environment-setup-powerpc-linux
cmake -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX etc

El resultado será idéntico en cuanto a haber utilizado un cadena de herramientas-archivo.

 4
Author: Patrick B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-18 11:31:48