使用git和CMake的C ++:如何使用特定参数构建子模块?

时间:2015-07-22 14:55:40

标签: c++ git cmake git-submodules

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

4 个答案:

答案 0 :(得分:1)

必须将构建选项(如MYLIB_WITH_SQLITE)添加到库的接口,即在旧学校配置模块的情况下添加到MYLIB_DEFINITIONS变量,或者添加到{ {1}}属性,如果库使用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 ...)

答案 1 :(得分:0)

CMake支持ExternalProject_Add的外部项目,您可以根据自己的喜好定义编译标记。用它来构建你的子模块。

更多详情:https://cmake.org/cmake/help/v3.2/module/ExternalProject.html

答案 2 :(得分:-1)

我认为最简单的答案是使用此SO answer中所述的-C选项。

答案 3 :(得分:-1)

我考虑的一个解决方案是分叉子模块的repo,编辑CMakeLists.txt以便更具体,然后将forked repo的HEAD修订版包含为子模块。不雅但可以接受。