CMake 构建 git 个子模块及其依赖项
CMake build git submodules and its dependencies
我是CMake新手,
我想在我的 CMake 项目中使用 C++ 库 A。
该库 A 作为 git 子模块包含在内,我使用
将其包含在我的 CMakeFile 中
add_subdirectory("extern/A")
目前有效。
但是,我的库 A 还有另外两个依赖项 B 和 C。它们包含在库 A 的 CMakeFile 中,使用 find_package()
.
现在,我希望 CMake 构建这些依赖项 B 和 C,以便库 A 可以使用它们。我想包括 B 和 C 作为 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)
另请注意,A
、B
和 RootProject
中的每一个都必须有一个 CMakeLists.txt
另请参阅:
我是CMake新手,
我想在我的 CMake 项目中使用 C++ 库 A。 该库 A 作为 git 子模块包含在内,我使用
将其包含在我的 CMakeFile 中add_subdirectory("extern/A")
目前有效。
但是,我的库 A 还有另外两个依赖项 B 和 C。它们包含在库 A 的 CMakeFile 中,使用 find_package()
.
现在,我希望 CMake 构建这些依赖项 B 和 C,以便库 A 可以使用它们。我想包括 B 和 C 作为 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)
另请注意,A
、B
和 RootProject
中的每一个都必须有一个 CMakeLists.txt
另请参阅: