如何在 CMake (Windows)中检索用户环境变量

我知道如何检索一个正常的机器广泛的环境变量在 CMAKE 使用

$ENV{EnvironmentVariableName}

but I can not retrieve a user specific environment variable. Is it possible and how?

121835 次浏览

你需要导出你的变量,比如 Linux:

export EnvironmentVariableName=foo

Unexported variables are empty in CMAKE.

环境变量(您使用系统属性修改的)只有在您创建一个新的子 shell 时才会传播到子 shell。

如果在更改 User env vars 时打开了命令行提示符(DOS 或 cygwin) ,那么它们将不会显示。

更改用户设置后,需要打开新的命令行提示符。

Unix/Linux 中的等价物是向您的。Bash _ rc: 需要启动一个新的 shell 来获取值。

在 CMake 脚本中引入变量

可以通过 cmake 调用在行上传递一个变量:

FOO=1 cmake

或者在 BASH 中导出一个变量:

export FOO=1

然后你可以使用 cmake 脚本:

$ENV{FOO}

您还可以通过跨平台的方式调用 本身:

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

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

Run command in a modified environment.


只有 注意,这可能只有工作的第一次。如果 CMake 使用一个连续的构建重新配置(你只需要调用例如 make,一个 CMakeLists.txt被改变,CMake 再次运行生成过程) ,用户定义的环境变量可能不再存在(与系统范围的环境变量相比)。

因此,我将项目中用户定义的环境变量转移到 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}")

参考文献