c++ - 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值

我正在尝试在我的源代码树中包含几个第三方库,对它们的构建系统进行最小的更改以便于升级。他们都使用 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 中显示此条目。

https://stackoverflow.com/questions/3766740/

相关文章:

java - Eclipse 无法删除错误

tfs - 如何获取 TFS 构建状态通知?

visual-studio - Visual Studio 在构建期间不断挂起

ios - Swift 框架不适用于命名为 'Debug' 或 'Release' : No suc

build - CMakeLists.txt 中未使用 CMAKE_BUILD_TYPE

javascript - 我可以使用 webpack 分别生成 CSS 和 JS 吗?

c# - 缺少调试目标?

visual-studio - VS2005 : Assembly '' is

Ant 到 Maven - 多个构建目标

javascript - 用于版本控制和缩小 javascript 的 Maven 插件