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

标签 c++ build build-process 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 中显示此条目。

关于c++ - 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3766740/

相关文章:

c++ - 如何将 vector 分配给引用变量?

java - 如何在构建的 jar 中包含文本文件? [NetBeans]

build-process - 多个网站在同一个代码库上运行?

java - 使用哪个供应商的 JDK 构建是否重要?

java - 仅设置如果依赖于Gradle插件任务

build-process - 在 hudson 的工作之间共享构建工件

c++ - 同一类中的多个 Operator() 重载

c++ - 是否可以使用索引迭代器访问另一个数组的索引?

c++ - 在巨大的日志文件中搜索数百种模式

java - Android - 处理构建不编译