So come recuperare una normale variabile di ambiente a livello di macchina in CMAKE utilizzando
$ENV{EnvironmentVariableName}
ma non riesco a recuperare una variabile di ambiente specifica dell'utente. È possibile e come?
So come recuperare una normale variabile di ambiente a livello di macchina in CMAKE utilizzando
$ENV{EnvironmentVariableName}
ma non riesco a recuperare una variabile di ambiente specifica dell'utente. È possibile e come?
Risposte:
Puoi passare una variabile sulla riga con l'invocazione cmake:
FOO=1 cmake
o esportando una variabile in BASH:
export FOO=1
Quindi puoi prenderlo in uno script cmake usando:
$ENV{FOO}
Puoi anche invocare cmake stesso per farlo in modo multipiattaforma:
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
Esegui il comando in un ambiente modificato.
Basta essere consapevoli che questo potrebbe funzionare solo la prima volta. Se CMake si riconfigura con una delle build consecutive (si chiama ad esempio make
, una è CMakeLists.txt
stata modificata e CMake esegue nuovamente il processo di generazione), la variabile di ambiente definita dall'utente potrebbe non essere più presente (rispetto alle variabili di ambiente a livello di sistema).
Quindi trasferisco quelle variabili di ambiente definite dall'utente nei miei progetti in una variabile memorizzata nella 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}")
Riferimento
Devi esportare le tue variabili. Quindi, ad esempio in Linux:
export EnvironmentVariableName=foo
Le variabili non esportate sono vuote in CMAKE.
IF($ENV{COVERAGE}) ... END()
, invocazione: COVERAGE=1 cmake ..
. Certo, non controllo il contenuto e non so se lo farebbe. Ma sicuramente funziona per testare se è definito o no!
Le variabili di ambiente (modificate utilizzando le proprietà del sistema) vengono propagate alle subshell solo quando si crea una nuova subshell.
Se avevi un prompt della riga di comando (DOS o cygwin) aperto quando hai modificato le variabili env utente, non verranno visualizzate.
È necessario aprire un nuovo prompt della riga di comando dopo aver modificato le impostazioni utente.
L'equivalente in Unix / Linux è l'aggiunta di una riga al tuo .bash_rc: devi avviare una nuova shell per ottenere i valori.
SET var_name=var_value
per impostare la variabile d'ambiente nella sessione DOS corrente, o SETX var_name var_value
per impostarla in modo permanente: vedi set e setx . anche impostare locale potrebbe essere interessante.
source ~/.bashrc
per rieseguire il .bashrc
file modificato e ottenere i nuovi valori nella sessione corrente.