我正在尝试在我的源代码树中包含几个第三方库,对它们的构建系统进行最小的更改以便于升级。他们都使用 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)
。这样做的效果是在第二次和后续构建尝试期间不尝试构建共享库,但在第一次尝试构建共享库时不尝试构建共享库,这是我真正需要加速的。
这可能吗,还是我需要为这些项目维护 fork 的 CMakeLists.txt?
最佳答案
尝试在缓存中设置变量
SET(FOO_BUILD_SHARED OFF CACHE BOOL "Build libfoo shared library")
注意:您需要指定变量类型和描述,以便 CMake 知道如何在 GUI 中显示此条目。
关于c++ - 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3766740/