我想设置一个带有一些选项(标志和字符串)的 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/