C++ 与 git 和 CMake : How to build submodules with specific parameters?

标签 c++ git cmake git-submodules

考虑一个在 git 存储库中组织的 C++ 项目。假设 git 存储库有一个子模块,( super )项目依赖于该子模块构建了一个库。如果( super )项目不仅依赖于库,还依赖于使用特定(CMake)参数构建的库,那么如何确保在构建( super )项目时使用这些参数构建子模块?

最佳答案

必须将构建选项(如 MYLIB_WITH_SQLITE)添加到库的接口(interface)中,即在老式配置的情况下添加到 MYLIB_DEFINITIONS 变量中-模块,或者到 INTERFACE_COMPILE_DEFINITIONS 属性,如果库使用 install(EXPORT ...) 命令创建其配置模块:

add_library(mylib ...)
if(MYLIB_WITH_SQLITE)
    target_compile_definitions(mylib PUBLIC MYLIB_WITH_SQLITE)
endif()
...
install(TARGETS mylib EXPORT mylib-targets ...)
install(EXPORT mylib-targets ...)

在消费库或可执行文件中,您可以编写简单的编译时检查:

#ifndef MYLIB_WITH_SQLITE
    #error mylib must be built with sqlite
#endif

关于C++ 与 git 和 CMake : How to build submodules with specific parameters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31566773/

相关文章:

c++ - 我不明白 std::tr1::unordered_map

c++ - 设置 OpenCV 和 .lib 文件

c++ - 在何处/如何将构建文件放置在 OpenCV 中

macos - 在osx特立独行中发布opencv的问题:ld:找不到架构x86_64的符号

c++ - STL bitset::count() 方法的性能如何?

c++ - 来自数组指针的正确语法访问值?

c++ - 将 CMake 对象库与共享库相结合

git - 如何浅克隆深度为 1 的特定提交?

git - 如何将 Azure DevOps 服务器存储库与 Azure DevOps 服务管道集成

git - 如果我从 Github 中删除一个带有 fork 的 fork 会怎样?