115

我知道如何使用 CMAKE 检索正常的机器范围的环境变量

$ENV{EnvironmentVariableName}

但我无法检索用户特定的环境变量。有可能吗?怎么做?

4

4 回答 4

96

将变量放入您的 CMake 脚本

您可以使用 cmake 调用在行上传递一个变量:

FOO=1 cmake

或通过在 BASH 中导出变量:

export FOO=1

然后您可以使用以下命令在 cmake 脚本中获取它:

$ENV{FOO}
于 2014-10-13T08:48:55.693 回答
16

您还可以调用本身以跨平台的方式执行此操作:

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

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

在修改后的环境中运行命令。


请注意,这可能只在第一次工作。如果 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}")

参考

于 2017-04-09T19:06:56.280 回答
5

您需要导出变量。因此,例如在 Linux 中:

export EnvironmentVariableName=foo

CMAKE 中未导出的变量为空。

于 2011-10-18T19:59:15.087 回答
1

环境变量(您使用系统属性修改的)仅在您创建新的子外壳时传播到子外壳。

如果您在更改用户环境变量时打开了命令行提示符(DOS 或 cygwin),那么它们将不会显示。

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

Unix/Linux 中的等价物是在你的 .bash_rc 中添加一行:你需要启动一个新的 shell 来获取这些值。

于 2014-07-01T23:52:39.950 回答