CMake 构建 git 个子模块及其依赖项

CMake build git submodules and its dependencies

我是CMake新手,

我想在我的 CMake 项目中使用 C++ 库 A。 该库 A 作为 git 子模块包含在内,我使用

将其包含在我的 CMakeFile 中
add_subdirectory("extern/A")

目前有效。

但是,我的库 A 还有另外两个依赖项 BC。它们包含在库 A 的 CMakeFile 中,使用 find_package().

现在,我希望 CMake 构建这些依赖项 BC,以便库 A 可以使用它们。我想包括 BC 作为 git 子模块。

简单连接

add_subdirectory("extern/B")
add_subdirectory("extern/C")
add_subdirectory("extern/A")

显然行不通。我认为使用 add_dependencies 可以帮助解决这个问题,但我还没有找到让它工作的方法...

甚至可以在这里做我想做的事吗?如果是,有人可以提示我可能必须使用哪些命令吗?

您的错误是将 B 添加为 RootProject 的依赖项,其中 A 需要它。

解决方案:

假设目录结构如下

RootProject
|__.git
|__CMakeLists.txt
|__src
|___(source files)
|__vendor
|___A
|____.git
|____CMakeLists.txt
|____src
|_____(source files)

在哪里

  • RootProject 取决于 A.
  • A 是一个没有依赖关系的库。

现在,如果您想将 B 添加为 A 的依赖项,您可以将 A 视为单独的项目并直接将 B 添加到其中(使用 git 子模块)你会做:

cd vendor/A
git submodule add https://github.com/username/repo.git vendor/B

这会将 B 添加为 A 的依赖项,而不是 RootProject

现在只需将以下内容添加到 vendor/A/CMakeLists.txt:

add_subdirectory("vendor/B")
# ......
target_link_libraries(A PUBLIC B)

另请注意,ABRootProject 中的每一个都必须有一个 CMakeLists.txt

另请参阅: