CMake子项目中的覆盖选项

vcirk6k6  于 2022-11-11  发布在  其他
关注(0)|答案(4)|浏览(216)

我尝试重用第三方项目的CMakeLists.txt,我不想更改其源代码(确切地说是expat)。
这是可行的,但是现在我想在顶层CMakeLists.txt中设置一些子项目的option的值。我该怎么做呢?

elcex8rz

elcex8rz1#

请参阅the similar question与一个好答案。
简单回答:

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

mrzz3bfm2#

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

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

uqzxnwby3#

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

knsnq2tg

knsnq2tg4#

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.

(see网址:http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:set)

相关问题