我应该使用add_subdirectory还是find_package?

时间:2016-06-28 16:35:01

标签: cmake

我有一些项目遵循此依赖关系图

可执行 主要 图书馆 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。

A /

B /

C /

主/

或者我应该为他们制作find_package解决方案的麻烦。

主/

A / //已安装到系统

B / //已安装到系统

C / //已安装到系统

这些库正在开发中,所以很高兴能够将它们全部视为我的ide中的一个项目,但我不想滥用add_subdirectory来适应我的特定开发工具。

1 个答案:

答案 0 :(得分:0)

如果依赖关系是第三方,则应使用find_package。这使某人可以用系统提供的依赖项代替您的依赖项。在创作可能包含在程序包管理器中的库(例如vcpkg或Linux发行版的标准存储库)时,这一点很重要。

如果相对于您的代码依赖项可能是交叉编译(例如,它是一个构建时工具或像Bison这样的代码生成器),那么您必须使用find_package。在给定的CMake构建过程中,只有一个工具链可以处于活动状态。

如果将依赖项存储在存储库中(直接存储或作为子模块存储),则使用ExternalProject进行超级构建可能会很方便。您的顶级项目将仅由外部项目流程组成,并且每个子项目都将安装到本地前缀,并在该前缀中查找包。有关更多详细信息,请参见CMAKE_INSTALL_PREFIXCMAKE_PREFIX_PATH

在任何其他情况下,最好使用add_subdirectory