我正在尝试将几个第三方库包含到我的源代码树中,以便于升级时最小化对其构建系统的更改。它们都使用CMake,而我也是,所以在我的CMakeLists.txt中,我可以使用add_subdirectory(extern/foo)
来添加libfoo。
但是foo的CMakeLists.txt编译了测试用例、构建文档和一个我不需要的共享库等内容。libfoo的作者预见到了这一点,并通过选项来控制它们 - 例如option(FOO_BUILD_SHARED "Build libfoo shared library" ON)
- 这意味着我可以通过CMake命令行设置它们。但我希望默认关闭并可通过命令行覆盖。
我曾尝试在add_subdirectory(extern/foo)
之前执行set(FOO_BUILD_SHARED OFF)
。这会导致在第二次及后续构建尝试中不尝试构建共享库,但在我真正需要加速的第一次构建中仍会构建。
这种操作是否可行,还是我需要为这些项目维护分叉的CMakeLists.txt?
FORCE
应该放在文档字符串之后,而不是随意放在中间... - ClaudiuOPTION
或SET(CACHE)
调用或上一次配置的CMakeCache.txt已经被缓存,那么您需要使用SET(FOO_BUILD_SHARED OFF CACHE BOOL "Build libfoo shared library" FORCE)
。来源 - AbaiINTERNAL
而不是BOOL
。那么,cmake_dependent_option
呢?它也适用吗? - Top-Master