【发布时间】:2012-12-13 06:03:13
【问题描述】:
我正在尝试重用我不想更改其来源的第三方项目的CMakeLists.txt(确切地说是expat)。我已使用 add_subdirectory 将该项目添加为顶层的子项目。
这可行,但现在我想在顶层CMakeLists.txt 中设置一些子项目的options 的值。我该怎么做?
【问题讨论】:
我正在尝试重用我不想更改其来源的第三方项目的CMakeLists.txt(确切地说是expat)。我已使用 add_subdirectory 将该项目添加为顶层的子项目。
这可行,但现在我想在顶层CMakeLists.txt 中设置一些子项目的options 的值。我该怎么做?
【问题讨论】:
【讨论】:
cmake 的选项,但一个子项目似乎需要一个额外的选项。
FORCE 作为附加参数。
如果子项目使用option(不是set)进行配置设置,那么您可以在添加子目录之前使用option指定值:
option(LIB_OPTION1 "" OFF)
option(LIB_OPTION2 "" ON)
add_subdirectory(${CMAKE_SOURCE_DIRECTORY}/lib)
【讨论】:
option,而是使用set,有没有办法在不使用缓存的情况下覆盖set的现有使用?
您可以在调用ADD_SUBDIRECTORY 之前使用所需的设置(ON 或OFF)定义选项。这将优先于 expat 的 CMakeLists.txt 中的 OPTION 命令,因为 OPTION 的最后一个参数只是一个 默认 值(如果该设置已经存在,则忽略该值)。
【讨论】:
CACHE
OPTION 命令缓存了它的效果,我刚刚尝试过,它可以工作。当然,该值可能不在缓存中,但对于SET 命令也是如此,除非您使用FORCE。我不得不承认SET 方式更通用,因为OPTION 只允许布尔值,但最终这就是你所要求的。
SET 定义选项。我明白你现在的意思了。
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)
【讨论】: