如何在CMake中检索用户环境variables(Windows)

我知道如何在CMAKE中使用一个普通的机器环境variables

$ENV{EnvironmentVariableName} 

但我无法检索用户特定的环境variables。 这是可能的和如何?

获取变量到你的CMake脚本

您可以通过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}") 

参考

  • CMake – 命令行工具模式

你需要输出你的变量。 所以例如在Linux中:

 export EnvironmentVariableName=foo 

未导出的变量在CMAKE中为空。

当您创建新的子shell时,环境变量(使用系统属性修改的)只传播到子壳体。

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

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

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