使用 CMake 仅构建 git 子模块存储库的一部分

Posted

技术标签:

【中文标题】使用 CMake 仅构建 git 子模块存储库的一部分【英文标题】:Build only part of a git submodule repository with CMake 【发布时间】:2020-06-29 14:18:21 【问题描述】:

我有一个带有子模块 another_repo 的 C++ 项目:

.
├── CMakeLists.txt
├── ext
│   └── another_repo
│       └── CMakeLists.txt
├── include
└── src

我想只构建another_repo 的一部分。也就是说,我需要一个新的、定制的CMakeLists.txt 来构建another_repo,而不是使用原来的./ext/another_repo/CMakeLists.txt

但是如何在根目录./CMakeLists.txt 中做到这一点呢?

【问题讨论】:

您可以添加另一个目标来构建another_repo仅部分 @Waqar 感谢您的提示。我的直截了当没有明白你的意思。如果您不介意,能否将您的评论扩展为答案? 查看答案 【参考方案1】:

如果您只想构建another_repo 的一部分,那么只需创建一个只构建您想要的部分的新目标。

例如,another_repo 有以下文件:

another_repo/
│── a.cpp
│── b.cpp
│── c.cpp

而您只想构建 a.cppb.cpp(假设它们不依赖于 c.cpp)。

在你的根目录CMakeLists.txt:

...

set(ANOTHER ext/another_repo)
add_library(part_of_another_repo $ANOTHER/a.cpp $ANOTHER/b.cpp)
#or add_executable() if it is an executable
...

【讨论】:

感谢您的回答。对,看来是正确的做法。

以上是关于使用 CMake 仅构建 git 子模块存储库的一部分的主要内容,如果未能解决你的问题,请参考以下文章

如何在竹子构建期间仅检查 git 存储库的一部分?

使用 CMake 只构建一次外部库

如何使用Git子模块和CMake处理传递依赖冲突?

CMake - 链接器错误与静态yaml-cpp作为git子模块

使用多个 git 存储库的 Webpack 模块联合。有例子吗?

在qbs项目中添加子模块(使用cmake构建)