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

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

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语句,并以某种方式检查变量是否设置,但我不知道如何,我希望有更好的方法.

最佳答案 FORCE(截至CMake 3.0.2)
not a valid parameter for option.

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

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

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

点赞