我有一些项目遵循此依赖关系图
可执行的主库A,B和C.
Main // _ Depends_A_B_C
A // _ Depends_B
乙
C // Depends_B
使用add_subdirectory将A,B和C放在全局范围并将它们全部链接在一起的超级项目对我来说更有意义吗?
PROJ /
CMakeList.txt //为b,a,c,主顺序中的每个目录添加add_subdirectory.
一个/
b /
C/
主要/
或者我应该为他们制作find_package解决方案的麻烦.
主要/
A///安装到系统
B///安装到系统
C///已安装到系统
这些库正在开发中,因此很高兴能够将它们全部视为我的ide中的一个项目,但我不想滥用add_subdirectory来适应我的特定开发工具.
如果依赖项是第三方的,那么您应该使用find_package. 这允许某人用系统提供的依赖项替换您的依赖项。当编写可能包含在包管理器中的库(例如vcpkg或 Linux 发行版的标准存储库)时,这一点非常重要。
如果依赖项可能相对于您的代码进行交叉编译(例如,它是构建时工具或像 Bison 这样的代码生成器),那么您必须使用find_package. 在给定的 CMake 构建过程中,只能有一个工具链处于活动状态。
如果您将依赖项存储在存储库中(直接或作为子模块),那么使用超级构建设置ExternalProject可能会很方便。您的顶级项目将仅包含外部项目编排,每个子项目将安装到本地前缀,并查找同一前缀中的包。请参阅CMAKE_INSTALL_PREFIX和CMAKE_PREFIX_PATH了解更多详细信息。
在任何其他情况下,首选add_subdirectory.