web-dev-qa-db-fra.com

Comment récupérer une variable d'environnement utilisateur dans CMake (Windows)

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?

94
Lars Bilke

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 dans BASH:

export FOO=1

Ensuite, vous pouvez le récupérer dans un script cmake en utilisant:

$ENV{FOO}
76

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

8
Florian

Vous devez avoir vos variables exportées. Ainsi, par exemple, sous Linux:

export EnvironmentVariableName=foo

Les variables non exportées sont vides dans CMAKE.

4
P51DAce

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.

1
Mark Lakata