我知道如何使用 CMAKE 检索正常的机器范围的环境变量
$ENV{EnvironmentVariableName}
但我无法检索用户特定的环境变量。有可能吗?怎么做?
我知道如何使用 CMAKE 检索正常的机器范围的环境变量
$ENV{EnvironmentVariableName}
但我无法检索用户特定的环境变量。有可能吗?怎么做?
您可以使用 cmake 调用在行上传递一个变量:
FOO=1 cmake
或通过在 BASH 中导出变量:
export FOO=1
然后您可以使用以下命令在 cmake 脚本中获取它:
$ENV{FOO}
您还可以调用cmake本身以跨平台的方式执行此操作:
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}")
参考
您需要导出变量。因此,例如在 Linux 中:
export EnvironmentVariableName=foo
CMAKE 中未导出的变量为空。
环境变量(您使用系统属性修改的)仅在您创建新的子外壳时传播到子外壳。
如果您在更改用户环境变量时打开了命令行提示符(DOS 或 cygwin),那么它们将不会显示。
更改用户设置后,您需要打开一个新的命令行提示符。
Unix/Linux 中的等价物是在你的 .bash_rc 中添加一行:你需要启动一个新的 shell 来获取这些值。