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-il possible, et comment?

79
demandé sur Andreas Haferburg 2009-03-27 18:27:13

4 réponses

Obtention des variables dans votre CMake script

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

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

$ENV{FOO}
65
répondu Cameron Lowell Palmer 2014-10-13 08:48:55

vous pouvez également invoquer lui-même de le faire de manière transversale:

cmake -E env EnvironmentVariableName="Hello World" cmake ..

env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...

exécuter la commande dans un environnement modifié.


Juste être conscient que cela fonctionnera seulement la première fois. Si CMake se reconfigure avec l'une des constructions consécutives (vous appelez par exemple make , une CMakeLists.txt a été changée et CMake passe à travers le processus de génération à nouveau), la variable d'environnement définie par l'utilisateur peut ne pas être là plus (par rapport à des variables d'environnement à l'échelle du système).

donc je transfère les variables d'environnement définies par l'utilisateur dans mes projets dans une variable cmake mise en cache:

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

6
répondu Florian 2017-04-09 19:18:21

vous devez exporter vos variables. Ainsi par exemple sous Linux:

export EnvironmentVariableName=foo

les variables non utilisées sont vides dans CMAKE.

3
répondu P51DAce 2011-11-13 14:55:59

les variables D'environnement (que vous modifiez en utilisant les propriétés du système) ne sont propagées vers les sous-cellules que lorsque vous créez un nouveau sous-cellule.

si vous aviez une invite de ligne de commande (DOS ou cygwin) ouverte lorsque vous avez changé l'utilisateur env vars, alors ils ne se montreront pas.

Vous devez ouvrir une nouvelle invite de ligne de commande après vous modifiez les paramètres de l'utilisateur.

L'équivalent dans Unix/Linux ajoute une ligne à votre .bash_rc: vous avez besoin de démarrer un nouveau shell pour obtenir les valeurs.

1
répondu Mark Lakata 2014-07-01 23:52:39