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

时间:2009-03-27 15:27:13

标签: windows environment-variables cmake

我知道如何使用

在CMAKE中检索正常的机器范围环境变量
$ENV{EnvironmentVariableName}

但我无法检索用户特定的环境变量。它有可能吗?如何?

4 个答案:

答案 0 :(得分:75)

将变量放入CMake脚本

您可以使用cmake调用在行上传递变量:

FOO=1 cmake

或通过在BASH中导出变量:

export FOO=1

然后你可以使用以下命令在cmake脚本中选择它:

$ENV{FOO}

答案 1 :(得分:8)

您也可以调用本身以跨平台方式执行此操作:

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}")

<强>参考

答案 2 :(得分:3)

您需要导出变量。例如在Linux中:

export EnvironmentVariableName=foo

未记录的变量在CMAKE中为空。

答案 3 :(得分:1)

环境变量(使用“系统属性”修改)仅在创建新子shell时传播到子shell。

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

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

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