我知道如何检索一个正常的机器广泛的环境变量在 CMAKE 使用
$ENV{EnvironmentVariableName}
but I can not retrieve a user specific environment variable. Is it possible and how?
你需要导出你的变量,比如 Linux:
export EnvironmentVariableName=foo
Unexported variables are empty in CMAKE.
环境变量(您使用系统属性修改的)只有在您创建一个新的子 shell 时才会传播到子 shell。
如果在更改 User env vars 时打开了命令行提示符(DOS 或 cygwin) ,那么它们将不会显示。
更改用户设置后,需要打开新的命令行提示符。
Unix/Linux 中的等价物是向您的。Bash _ rc: 需要启动一个新的 shell 来获取值。
可以通过 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]... Run command in a modified environment.
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
Run command in a modified environment.
只有 注意,这可能只有工作的第一次。如果 CMake 使用一个连续的构建重新配置(你只需要调用例如 make,一个 CMakeLists.txt被改变,CMake 再次运行生成过程) ,用户定义的环境变量可能不再存在(与系统范围的环境变量相比)。
make
CMakeLists.txt
因此,我将项目中用户定义的环境变量转移到 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}")
参考文献