考虑一个在 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/