我想覆盖一个将formely设置为OFF的选项。我正在使用
SET(USE_OPTION ON CACHE BOOL "Override option" FORCE)
仅仅是因为我的好奇心:为什么我需要' FORCE' (没有它,set()不起作用)
答案 0 :(得分:7)
选项是用户在配置步骤之后以及通过cmake-gui
,ccmake
或-D
命令行开关等工具生成实际构建环境之前可以更改的变量。
这就是为什么他们首先被缓存的原因。必须坚持用户做出的选择。所以
option(USE_OPTION "My option" ON)
等同于
set(USE_OPTION ON CACHE BOOL "My option")
所以改变或强制用户可定义的值" / cached变量你必须FORCE
。
或使用非缓存变量隐藏/覆盖当前变量范围:
set(USE_OPTION ON)
<强>参考强>
答案 1 :(得分:1)
来自docs:
如果存在CACHE,则将其放入缓存中, 除非它已经在缓存中
我认为之前的选项也是CACHE
。
如果指定FORCE,则设置缓存变量的值,甚至 如果变量已经在缓存中。
因此,如果您未指定FORCE
,则不会按照上述内容添加到缓存中。