我正在处理一个在 cmake 层次结构中具有多个 OPTION 命令的项目。
如果启用了一个选项 (OPTION_A=ON),则其他选项 (OPTION_B) 将通过新包含的子目录添加到 cmake 缓存中:
CMakeLists.txt:
OPTION(OPTION_A "Do such and such" OFF)
IF(OPTION_A)
add_subdirectory(subdir)
ENDIF(OPTION_A)
子目录/CMakeLists.txt:
OPTION(OPTION_B "Do this and that" OFF)
IF(OPTION_B)
add_subdirectory(subsubdir)
ENDIF(OPTION_B)
subdir/subsubdir/CMakeLists.txt:
OPTION(OPTION_C "Do foo then bar" OFF)
IF(OPTION_C)
<...>
ENDIF(OPTION_C)
这很好,因为例如使用 ccmake 时,除非将 OPTION_A/B 配置为 ON,否则我不会对 OPTION_B/C 感到不安,从而在CMakeCache.txt 中生成 OPTION_B/C
问题是相反的:
当禁用 OPTION_A、OPTION_B 和 OPTION_C 缓存变量时,ccmake 中仍然显示。
我想出了三个解决方案:
对于不需要修改 cmake 的“宽”和“深”cmake 层次结构,是否有一个通用的解决方案?这是一个值得付出努力的常见问题吗?
Tsyvarev 在评论中提到的内容,您可以使用CMakeDependentOption
.
此处OPTION_B
变为可用且默认为ON
仅当OPTION_A
为 时ON
,否则将设置为OFF
。您也可以将其默认设置为,OFF
但我在ON
这里设置它是为了明确哪个是:
OPTION(OPTION_A "Do such and such" OFF)
CMAKE_DEPENDENT_OPTION(OPTION_B "Do this and that" ON
"OPTION_A" OFF)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句