CMake设置环境变量

Ped*_*nte 11 linux cmake environment-variables

根据CMake文档

https://cmake.org/cmake/help/v3.3/command/set.html

一个人可以做

set(ENV{<variable>} <value>)
Run Code Online (Sandbox Code Playgroud)

但这给出了结果

set(ENV{FOO} foo)
message("variable is $ENV{FOO}")
Run Code Online (Sandbox Code Playgroud)

在配置时

variable is foo
Run Code Online (Sandbox Code Playgroud)

但是在Linux命令中

echo $FOO
Run Code Online (Sandbox Code Playgroud)

该变量未设置。

编辑:

这是问题的部分解决方案,即设置$PATH,以便用户CMAKE_INSTALL_PREFIX首先列出

set(file_sh ${CMAKE_CURRENT_BINARY_DIR}/path.sh)
set(path "${CMAKE_INSTALL_PREFIX}:$ENV{PATH}")
file(WRITE ${file_sh} "#!/usr/bin/env bash\n")
file(APPEND ${file_sh} "export PATH=\"${path}\"")
execute_process(COMMAND chmod a+x ${file_sh} RESULT_VARIABLE res)
Run Code Online (Sandbox Code Playgroud)

这会创建这个文件

#!/usr/bin/env bash
export PATH="/install/prefix/path:/other/path"
Run Code Online (Sandbox Code Playgroud)

稍后可以在 bash 终端上执行

source path.sh
Run Code Online (Sandbox Code Playgroud)

vre*_*vre -3

您引用的文档的最后一段给出了答案:

Set the current process environment <variable> to the given value.

它影响从 shell 启动 CMake 时创建的当前进程环境。它不是 shell 本身的环境。

  • 好的,但是段落标题说 **设置环境变量** Cmake 文档不是我发现的最好的文档 (4认同)
  • 我理解您对文档的抱怨,但是如何向进程提供环境是特定于操作系统的,并且在 Unix/Linux 和 Windows 中类似。创建子进程(您的 cmake)的每个进程(例如您的 bash)都会为新进程提供其环境的副本。您以后无法更改父进程的环境。但是您可以启动一个设置环境变量的中间过程,然后启动 cmake。 (3认同)