如何在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来获取值。