Je sais comment récupérer une variable d'environnement machine normale dans CMAKE en utilisant
$ENV{EnvironmentVariableName}
mais je ne peux pas récupérer une variable d'environnement spécifique à l'utilisateur. Est-ce possible et comment?
Vous pouvez passer une variable sur la ligne avec l'invocation de cmake:
FOO=1 cmake
ou en exportant une variable dans BASH:
export FOO=1
Ensuite, vous pouvez le récupérer dans un script cmake en utilisant:
$ENV{FOO}
Vous pouvez également invoquer cmake pour le faire de manière multiplateforme:
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
Exécuter la commande dans un environnement modifié.
Juste soyez conscient que cela ne fonctionnera que la première fois. Si CMake reconfigure avec l’une des versions consécutives (vous n’appelez par exemple que make
, un CMakeLists.txt
a été modifié et CMake exécute à nouveau le processus de génération), la variable d'environnement définie par l'utilisateur peut ne plus être présente (par rapport aux variables d'environnement à l'échelle du système).
Donc, je transfère ces variables d'environnement définies par l'utilisateur dans mes projets dans une variable en 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}")
Référence
Vous devez avoir vos variables exportées. Ainsi, par exemple, sous Linux:
export EnvironmentVariableName=foo
Les variables non exportées sont vides dans CMAKE.
Les variables d'environnement (que vous modifiez à l'aide des propriétés système) ne sont propagées aux sous-shell que lorsque vous créez un nouveau sous-shell.
Si une invite de ligne de commande (DOS ou cygwin) était ouverte lorsque vous avez modifié les vars Env utilisateur, ils ne s'afficheront pas.
Vous devez ouvrir une nouvelle invite de ligne de commande après avoir modifié les paramètres utilisateur.
L'équivalent sous Unix/Linux ajoute une ligne à votre fichier .bash_rc: vous devez démarrer un nouveau shell pour obtenir les valeurs.