Comment récupérer une variable d'environnement utilisateur dans CMake (Windows)
-
22-08-2019 - |
Question
Je sais comment récupérer une variable d'environnement large normal de la machine à l'aide CMAKE
$ENV{EnvironmentVariableName}
mais je ne peux pas récupérer une variable d'environnement utilisateur spécifique. Est-il possible et comment?
La solution
Obtenir des variables dans votre script CMake
Vous pouvez passer une variable sur la ligne avec l'invocation de CMake:
FOO=1 cmake
ou en exportant une variable en bash:
export FOO=1
Ensuite, vous pouvez le ramasser dans un script utilisant CMake:
$ENV{FOO}
Autres conseils
Vous pouvez également appeler CMake lui-même pour faire ceci d'une manière multi-plateforme:
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
Exécuter la commande dans un environnement modifié.
Il suffit de être conscient que cela ne peut fonctionner que la première fois. Si CMake re-configure avec l'un des consécutive builds (vous appelez simplement par exemple make
, un CMakeLists.txt
a été changé et CMake passe par le processus de génération à nouveau), la variable d'environnement définie par l'utilisateur ne peut pas être plus là (par rapport à l'ensemble du système des variables d'environnement ).
transférer les variables d'environnement définies par l'utilisateur dans mes projets dans une variable mises 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.
Variables d'environnement (que vous modifiez en utilisant les propriétés du système) ne sont propagées à sous-couches lorsque vous créez un nouveau sous-shell.
Si vous aviez une invite de ligne de commande (DOS ou Cygwin) ouvert lorsque vous avez changé les vars env utilisateur, ils ne seront pas visibles.
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 .bash_rc. Vous devez lancer un nouveau shell pour obtenir les valeurs