以下两者有什么区别吗?
set(FOO true CACHE BOOL "description")
option(FOO "description" ON)
背景:即使我已经使用 CMake 一段时间了,我option
今天才注意到这个命令,因此我一直在使用set
:我想知道用第二个替换第一个是否安全/值得。
在您的示例中,没有区别。但可能存在差异:
Option
有一个默认值OFF
。CMakeDependentOption
Set
接受除;-listsBOOL
以外的类型。此外,当您使用某个选项时,您是在向您的用户表明它可以安全地设置。从外部设置内部变量可能会巧妙地破坏具有无效值的脚本。
偶然发现了这个问题,并认为我添加了更新。
正如这里option
所解释的,如果存在同名的普通变量,该命令不会创建 CACHE 变量。此行为是在版本 3.13 中引入的(这是默认设置)。另一方面,将名为FOO
when FOO
exists 的 CACHE 变量设置为普通变量,将产生 FOO 的两个副本,一个普通变量和一个 CACHE 副本。
因此,在上游已经定义了同名变量时,是否使用option(FOO "" ON)
或还可能取决于您希望配置系统执行的操作。set(FOO ON CACHE BOOL "")
注意:如果 FOO 已在 cache 的上游定义,则两者的行为方式仍然相同。区别仅在于上游是正常变量时。