在 CMake 文件中打开和关闭选项有多安全?

How safe is to swith options ON and OFF in a CMake file?

我有个项目有一个选项,用来生成相关的可执行文件,生成在下级子目录,上级CMakeLists.txt设置选项ON或OFF。对于分发,我需要 ON 和 OFF 状态的可执行文件(具有依赖于选项的名称)。目前,我设置选项 运行 CMake,设置选项 运行 CMake。如果我使用如下所示的东西是否安全(主要考虑缓存和线程)?

opt ON

include(generate)

opt OFF

include(generate)

正常情况下,它应该在没有缓存的情况下工作:

set(<option> ON)
include(generate)

set(<option> OFF)
include(generate)

线程在任何情况下都不会成为问题,因为 CMake 脚本(配置 阶段)的解释是 单线程 相反到 build 阶段。

使用 option() 命令而不是 set() 将不起作用,因为 option() 不会修改已在缓存中设置的变量。

您可以使用 set(<option> <value> CACHE ...) 而不是 set(<option> <value>),但通常不需要增加这种复杂性,除非 generate 脚本明确检查缓存选项的值。

请注意,generate 脚本不仅应 "have option-dependent names",而且不应创建 缓存 条目,这取决于 <option> 值.否则用不同的选项调用脚本两次会被破坏。