cmake - 使用环境变量作为 cmake 选项的默认值

标签 cmake environment-variables

我想设置一个带有一些选项(标志和字符串)的 cmake 脚本。对于某些选项,我想使用环境变量作为默认值。基本上,我试图在 Makefile 中模拟类似 MY_OPTION ?= default 的内容。我尝试了以下方法:

project (Optiontest)

option(MY_OPTION 
       "Documentation"
       $ENV{MY_OPTION}
       FORCE)

message("value: ${MY_OPTION}")

我用以下方式调用它:

$ cmake -DMY_OPTION=ON .
value: ON
$ cmake -DMY_OPTION=OFF .
value: OFF
$ MY_OPTION=OFF cmake .
value: OFF
$ MY_OPTION=ON cmake .
value: OFF

我的问题是最后一行也应该打开。

对于奖励业力:我实际上更喜欢三个级别的偏好。如果给定,则应使用 -DMY_OPTION 的值。如果没有,则应使用设置的环境变量 MY_OPTION 的值。如果也未设置,则应使用常量。我想,我可以使用一堆嵌套的 if 语句并以某种方式检查变量是否已设置,但我不知道如何,我希望有更好的方法。

最佳答案

FORCE 是(从 CMake 3.0.2 开始)not a valid parameter for option .

这是问题的主要根源。在没有环境变量的情况下,CMake 会将字符串 FORCE 解释为选项所需的初始值。 usual contrived rules对于字符串到真值转换适用,导致此调用将选项设置为 OFF

其次,您需要考虑未设置环境变量的事实。您当前的代码无法正确处理这种情况。在这种情况下,$ENV{MY_OPTION} 将计算为空字符串。如果您评估缓存和环境中的设置值,则可以强制执行您想要的任何行为。

一般来说,您应该考虑一下您真正想要的是什么。通常,FORCE 设置缓存变量是一个坏主意,如果您在仔细重新评估后发现这样做的最初论点有缺陷,我不会感到惊讶。

关于cmake - 使用环境变量作为 cmake 选项的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26518843/

相关文章:

c++ - 未安装的包上的 CMake "find_package"命令意外成功

c++ - CMake set_target_properties 和 include_directories

c++ - 库的某些非内联方法错误 "undefined reference to"

Powershell 使用环境路径解析文件

windows - 如何在 Windows 命令提示符下设置具有多行文件内容的 env 变量

android - 如何修复 HelloCardboard 示例的 NDK 构建错误

c++ - OpenCV 3.0 未定义的引用错误?

php - 如何将 PHP HTTP_USER_AGENT 保存到 MySQL 字段

windows - 如何在不解释变量的情况下打印/回显 PATH 等 Windows 环境变量?

bash - 在 Yosemite 中设置环境变量