如何在CMake中检索用户环境variables(Windows)
我知道如何在CMAKE中使用一个普通的机器环境variables
$ENV{EnvironmentVariableName}
但我无法检索用户特定的环境variables。 这是可能的和如何?
获取variables到你的CMake脚本
您可以通过cmake调用传递一个variables:
FOO=1 cmake
或者通过在BASH中导出一个variables:
export FOO=1
然后你可以在cmake脚本中使用:
$ENV{FOO}
你也可以调用cmake本身来以跨平台的方式来做到这一点:
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
在修改的环境中运行命令。
请注意 ,这可能只是第一次。 如果CMake重新configuration了一个连续的构build(你只是调用例如make
,一个CMakeLists.txt
被更改,CMake再次运行生成过程),用户定义的环境variables可能不再存在(与系统范围相比环境variables)。
所以我把我的项目中的用户定义的环境variables转移到CMakecachingvariables中:
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}")
参考
- CMake – 命令行工具模式
你需要输出你的variables。 所以例如在Linux中:
export EnvironmentVariableName=foo
未导出的variables在CMAKE中为空。
环境variables(使用系统属性修改)只在您创build新的子shell时传播到子壳体。
如果您在更改用户环境variables时打开了命令行提示符(DOS或cygwin),则不会显示。
更改用户设置后,需要打开新的命令行提示符。
Unix / Linux中的等价物正在向.bash_rc中添加一行:您需要启动一个新的shell来获取值。