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

时间:2014-10-22 23:26:31

标签: cmake environment-variables options

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

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

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

2 个答案:

答案 0 :(得分:2)

FORCE(截至CMake 3.0.2)not a valid parameter for option

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

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

一般来说,你应该考虑一下你真正想要的东西。通常,FORCE设置一个缓存变量是一个坏主意,如果你在经过一些仔细的重新评估后发现你做这个缺陷的初步论证,我不会感到惊讶。

答案 1 :(得分:0)

也许在CMake缓存中缓存了MY_OPTION的值?在第三次调用MY_OPTION=OFF cmake .后,您是否尝试清理cmake缓存?