Sé cómo recuperar una variable de entorno normal en toda la máquina en CMAKE usando
$ENV{EnvironmentVariableName}
pero no puedo recuperar una variable de entorno específica del usuario. ¿Es posible y como?
Sé cómo recuperar una variable de entorno normal en toda la máquina en CMAKE usando
$ENV{EnvironmentVariableName}
pero no puedo recuperar una variable de entorno específica del usuario. ¿Es posible y como?
Respuestas:
Puede pasar una variable en la línea con la invocación de cmake:
FOO=1 cmake
o exportando una variable en BASH:
export FOO=1
Luego puede recogerlo en un script de cmake usando:
$ENV{FOO}
También puede invocar hacer sí mismo para hacer esto de una manera multiplataforma:
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
Ejecute el comando en un entorno modificado.
Solo tenga en cuenta que es posible que esto solo funcione la primera vez. Si CMake se reconfigura con una de las compilaciones consecutivas (solo llama make
, por ejemplo , CMakeLists.txt
se cambió una y CMake se ejecuta nuevamente en el proceso de generación), es posible que la variable de entorno definida por el usuario ya no esté allí (en comparación con las variables de entorno del sistema).
Así que transfiero esas variables de entorno definidas por el usuario en mis proyectos a una variable en caché de CMake:
cmake_minimum_required(VERSION 2.6)
project(PrintEnv NONE)
if (NOT "$ENV{EnvironmentVariableName}" STREQUAL "")
set(EnvironmentVariableName "$ENV{EnvironmentVariableName}" CACHE INTERNAL "Copied from environment variable")
endif()
message("EnvironmentVariableName = ${EnvironmentVariableName}")
Referencia
Necesita exportar sus variables. Entonces, por ejemplo en Linux:
export EnvironmentVariableName=foo
Las variables no exportadas están vacías en CMAKE.
IF($ENV{COVERAGE}) ... END()
, invocación: COVERAGE=1 cmake ..
. Por supuesto, no verifico el contenido y no sé si lo haría. ¡Pero ciertamente funciona para probar si está definido o no!
Las variables de entorno (que modifica mediante las Propiedades del sistema) solo se propagan a las subcapas cuando crea una nueva subcapa.
Si tenía un indicador de línea de comandos (DOS o cygwin) abierto cuando cambió las variables de entorno de usuario, entonces no aparecerán.
Debe abrir una nueva línea de comandos después de cambiar la configuración del usuario.
El equivalente en Unix / Linux es agregar una línea a su .bash_rc: necesita iniciar un nuevo shell para obtener los valores.
SET var_name=var_value
para configurar la variable de entorno en la sesión actual de DOS, o SETX var_name var_value
para configurarla permanentemente: consulte set y setx . establecer local también puede ser interesante.
source ~/.bashrc
para volver a ejecutar el .bashrc
archivo modificado y obtener los nuevos valores en su sesión actual.