Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CMake(Windows)中检索用户环境变量_Windows_Environment Variables_Cmake - Fatal编程技术网

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

如何在CMake(Windows)中检索用户环境变量,windows,environment-variables,cmake,Windows,Environment Variables,Cmake,我知道如何使用 $ENV{EnvironmentVariableName} 但我无法检索特定于用户的环境变量。是否可能以及如何实现?您需要导出变量。例如在Linux中: export EnvironmentVariableName=foo 未报告的变量在CMAKE中为空。环境变量(使用系统属性修改)仅在创建新的子shell时传播到子shell 如果在更改用户环境变量时打开了命令行提示符(DOS或cygwin),则它们不会显示 更改用户设置后,需要打开新的命令行提示符 Unix/Linux中的

我知道如何使用

$ENV{EnvironmentVariableName}

但我无法检索特定于用户的环境变量。是否可能以及如何实现?

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

export EnvironmentVariableName=foo
未报告的变量在CMAKE中为空。

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

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

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

Unix/Linux中的等效方法是在.bash\u rc中添加一行:您需要启动一个新的shell来获取值。

将变量添加到CMake脚本中 可以使用cmake调用在行上传递变量:

FOO=1 cmake
或者通过在BASH中导出变量:

export FOO=1
然后,您可以使用以下方法在cmake脚本中拾取它:

$ENV{FOO}
您还可以通过跨平台方式调用自身来完成此操作:

cmake -E env EnvironmentVariableName="Hello World" cmake ..
env[--unset=NAME]。。。[名称=值]。。。命令[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}")
参考


您不必导出它们!示例:CMakeLists.txt
IF($ENV{COVERAGE})。。。END()
,调用:
COVERAGE=1 cmake..
。当然,我不检查内容,也不知道是否会。但是,无论定义与否,它都适用于测试!如果在前几行中定义了变量,则确实需要导出。只有在同一行上定义的变量不需要导出,但问题是我们无法推断您是以这种方式还是另一种方式进行导出。这是Google首次在CMake中检索环境变量。这个问题已经包含了答案,这可能有点奇怪,但在我看来不应该删除它。@Ludwik因为它回答了用户特定的环境变量在CMake脚本中不可用的问题。部分问题是“用户特定的环境变量”和“普通机器范围的环境变量”之间的分离是一个非常特定于Windows的概念。类Unix系统不关心环境变量的设置位置;它们都是一样的。例如:
message($ENV{WINDIR})
显示
C:\Windows
(注意它不是写在%WINDIR%)对于Windows,您还可以运行
SET var\u name=var\u value
在当前DOS会话中设置环境变量,或者
SETX var\u name var\u value
永久设置它:请参阅和。可能也很有趣。对于Unix/Linux,您通常也可以运行
source~/.bashrc
来重新运行修改后的
.bashrc
文件,并将新值放入当前会话中。