【问题标题】:CMake set environment variableCMake设置环境变量
【发布时间】:2017-09-17 17:05:23
【问题描述】:

根据 CMake 文档

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

一个人做得到

set(ENV{<variable>} <value>)

但这给出了结果

set(ENV{FOO} foo)
message("variable is $ENV{FOO}")

在配置时

variable is foo

但是在 Linux 命令下

echo $FOO

变量未设置。

编辑:

这是问题的部分解决方案,即设置$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)

这会创建这个文件

#!/usr/bin/env bash
export PATH="/install/prefix/path:/other/path"

稍后可以在 bash 终端上执行

source path.sh

【问题讨论】:

标签: linux cmake environment-variables


【解决方案1】:

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

Set the current process environment &lt;variable&gt; to the given value.

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

【讨论】:

  • 好的,但是段落标题说 Set Environment Variable Cmake 文档不是我找到的最好的
  • 我理解您对文档的抱怨,但是如何为进程提供环境是操作系统特定的,并且在 Unix/Linux 和 Windows 中类似。创建子进程(您的 cmake)的每个进程(例如您的 bash)都会为新进程提供其环境的副本。以后不能更改父进程的环境。但是你可以启动一个设置环境变量的中间进程,然后启动cmake。
【解决方案2】:

在你的命令前加上cmake -E env XXX=YYY

要测试,请使用cmake -E env XXX=YYY cmake -E environment

此命令似乎从 CMake 3.1 开始可用。欲了解更多信息,请参阅https://cmake.org/cmake/help/latest/manual/cmake.1.html#run-a-command-line-tool

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2020-06-08
    • 2018-07-13
    • 2011-11-26
    相关资源
    最近更新 更多