为什么我需要FORCE来覆盖CMake选项?

时间:2016-09-20 08:08:50

标签: cmake

我想覆盖一个将formely设置为OFF的选项。我正在使用

SET(USE_OPTION ON CACHE BOOL "Override option" FORCE)

仅仅是因为我的好奇心:为什么我需要' FORCE' (没有它,set()不起作用)

2 个答案:

答案 0 :(得分:7)

选项是用户在配置步骤之后以及通过cmake-guiccmake-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,则不会按照上述内容添加到缓存中。