Eu sei como recuperar uma variável de ambiente normal de toda a máquina no CMAKE usando
$ENV{EnvironmentVariableName}
mas não consigo recuperar uma variável de ambiente específica do usuário. É possível e como?
Eu sei como recuperar uma variável de ambiente normal de toda a máquina no CMAKE usando
$ENV{EnvironmentVariableName}
mas não consigo recuperar uma variável de ambiente específica do usuário. É possível e como?
Respostas:
Você pode passar uma variável na linha com a invocação cmake:
FOO=1 cmake
ou exportando uma variável no BASH:
export FOO=1
Então você pode pegá-lo em um script cmake usando:
$ENV{FOO}
Você também pode invocar cmake para fazer isso de uma forma multiplataforma:
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
Execute o comando em um ambiente modificado.
Esteja ciente de que isso pode funcionar apenas na primeira vez. Se o CMake for reconfigurado com um dos builds consecutivos (você apenas chama make
, por exemplo , um CMakeLists.txt
foi alterado e o CMake executa o processo de geração novamente), a variável de ambiente definida pelo usuário pode não estar mais lá (em comparação com as variáveis de ambiente do sistema).
Então, eu transfiro essas variáveis de ambiente definidas pelo usuário em meus projetos para uma variável em cache 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}")
Referência
Você precisa ter suas variáveis exportadas. Por exemplo, no Linux:
export EnvironmentVariableName=foo
Variáveis não exportadas estão vazias no CMAKE.
IF($ENV{COVERAGE}) ... END()
, invocação: COVERAGE=1 cmake ..
. Concedido, não verifico o conteúdo e não sei se faria. Mas certamente funciona para testar se está definido ou não!
Variáveis de ambiente (que você modifica usando as Propriedades do sistema) são propagadas apenas para subshells quando você cria um novo subshell.
Se você tinha um prompt de linha de comando (DOS ou cygwin) aberto quando alterou os vars env do usuário, eles não aparecerão.
Você precisa abrir um novo prompt de linha de comando após alterar as configurações do usuário.
O equivalente em Unix / Linux é adicionar uma linha ao seu .bash_rc: você precisa iniciar um novo shell para obter os valores.
SET var_name=var_value
para definir a variável de ambiente na sessão DOS atual ou SETX var_name var_value
para defini-la permanentemente: consulte set e setx . definir local também pode ser interessante.
source ~/.bashrc
para executar novamente o .bashrc
arquivo modificado e obter os novos valores em sua sessão atual.