我知道如何在 CMAKE 中检索常规的机器范围环境变量,方法如下:
$ENV{EnvironmentVariableName}
我无法检索特定于用户的环境变量。这可能吗?如果可以,应该如何操作?
我知道如何在 CMAKE 中检索常规的机器范围环境变量,方法如下:
$ENV{EnvironmentVariableName}
我无法检索特定于用户的环境变量。这可能吗?如果可以,应该如何操作?
您可以在cmake调用的命令行上传递变量:
FOO=1 cmake
或通过在BASH中导出变量:
export FOO=1
然后您可以在cmake脚本中使用以下语句来选择它:
$ENV{FOO}
$Env:HOME = $HOME; cmake ...
- Lucian Thorrcmake -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中未导出的变量为空。
IF($ENV{COVERAGE}) ... END()
,调用时使用COVERAGE=1 cmake ..
。尽管我没有检查内容,并且不知道它是否有效,但肯定适用于测试其是否被定义! - Janus Troelsen环境变量(您可以使用系统属性进行修改)仅在创建新的子shell时传播到子shell。
如果您在更改用户环境变量时打开了命令行提示符(DOS或cygwin),则它们不会显示出来。
您需要在更改用户设置后打开一个新的命令行提示符。
在Unix / Linux中,相当于添加一行到您的.bash_rc:您需要启动一个新的shell才能获取值。
message($ENV{WINDIR})
显示C:\Windows
(请注意,它不是写成%WINDIR%)。 - Gabriel Devillers