我知道如何使用
在CMAKE中检索正常的机器范围环境变量$ENV{EnvironmentVariableName}
但我无法检索用户特定的环境变量。它有可能吗?如何?
答案 0 :(得分:75)
您可以使用cmake调用在行上传递变量:
FOO=1 cmake
或通过在BASH中导出变量:
export FOO=1
然后你可以使用以下命令在cmake脚本中选择它:
$ENV{FOO}
答案 1 :(得分:8)
您也可以调用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}")
<强>参考强>
答案 2 :(得分:3)
您需要导出变量。例如在Linux中:
export EnvironmentVariableName=foo
未记录的变量在CMAKE中为空。
答案 3 :(得分:1)
环境变量(使用“系统属性”修改)仅在创建新子shell时传播到子shell。
如果在更改用户环境变量时打开了命令行提示符(DOS或cygwin),则它们将不会显示。
更改用户设置后,需要打开新的命令行提示符。
Unix / Linux中的等价物是在.bash_rc中添加一行:你需要启动一个新的shell来获取值。