在CMake子项目中覆盖选项

时间:2012-12-27 21:34:34

标签: cmake project option

我正在尝试重复使用我不想更改其来源的第三方项目的CMakeLists.txt(确切地说是expat)。我已使用add_subdirectory将项目添加为顶级子项目。

这有效,但现在我想在顶级option中设置一些子项目的CMakeLists.txt s的值。我该怎么做?

4 个答案:

答案 0 :(得分:21)

请给the similar question一个好的答案。

简短回答:

SET(SOME_EXPAT_OPTION OFF CACHE BOOL "Use some expat option")

答案 1 :(得分:19)

如果子项目使用option(不是set)进行配置设置,则可以在添加子目录之前使用option指定值:

option(LIB_OPTION1 "" OFF)
option(LIB_OPTION2 "" ON)
add_subdirectory(${CMAKE_SOURCE_DIRECTORY}/lib)

答案 2 :(得分:4)

您可以在调用ADD_SUBDIRECTORY之前使用所需的设置(ON或OFF)定义选项。这将优先于expat的OPTION中的CMakeLists.txt命令,因为OPTION的最后一个参数只是默认值(如果已经设置了该值,则会被忽略存在)。

答案 3 :(得分:-3)

SET命令具有'PARENT_SCOPE'选项:

If PARENT_SCOPE is present, the variable will be set in the scope above the current
scope. Each new directory or function creates a new scope. This command will set the 
value of a variable into the parent directory or calling function (whichever is 
applicable to the case at hand). PARENT_SCOPE cannot be combined with CACHE.

(见:http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:set