2016-03-13 28 views
1

我确实有一个项目带有一个选项,用于生成相关的可执行文件,这些可执行文件在较低级别的子目录中生成,而较高级别的CMakeLists.txt将选项设置为ON或OFF。对于分发,我需要可执行文件(具有与选项有关的名称)用于ON和OFF状态。目前,我设置了选项,运行CMake,设置选项,运行CMake。如果我使用如下所示的内容,是否安全(主要考虑缓存和线程)?在CMake文件中打开和关闭选项的安全性如何?

选择ON

包括(产生)

选择OFF

包括(产生)

回答

1

通常情况下,它应该不缓存工作:

set(<option> ON) 
include(generate) 

set(<option> OFF) 
include(generate) 

线程不会在任何情况下出现问题,因为解释CMake脚本(配置阶段)是单线程建立阶段相反。

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

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

注意,那generate脚本应该不仅是“有依赖期权的名字”,但也不能创建缓存条目取决于<option>值。否则,使用不同选项调用脚本两次会被中断。

+0

嗯,在构建阶段,我看到组件以交错方式编译,最终结果是我有两个相同的副本,名称不同。两个版本之间没有冲突,但只有第一组()是有效的。 – katang

+0

嗯,你的'generate'脚本是否使用'add_definitions','include_directories'或类似的命令?这些命令分配当前变量,这会影响目录中内置的* all *可执行文件。 – Tsyvarev

+0

我使用useinclude_directories,但它们对于两个版本都是相同的。 – katang

相关问题