在 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>
值.否则用不同的选项调用脚本两次会被破坏。
我有个项目有一个选项,用来生成相关的可执行文件,生成在下级子目录,上级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>
值.否则用不同的选项调用脚本两次会被破坏。