【发布时间】:2016-06-28 16:35:00
【问题描述】:
我有一些项目遵循这个依赖图:
Executable
Main
Libraries A, B, and C
Main //_Depends_A_B_C
A //_Depends_B
B
C //Depends_B
创建一个使用add_subdirectory 将A、B 和C 放在全局范围内并将它们链接在一起的超级项目对我来说更有意义吗?
Proj/
CMakeList.txt // Has add_subdirectory for each directory in b,a,c,Main order.
a/
b/
c/
Main/
或者我是否应该为他们制作find_package 解决方案的麻烦。
Main/
A/ //Installed to system
B/ //Installed to system
C/ //Installed to system
这些库正在开发中,因此很高兴能够在我的 IDE 中将它们全部视为一个项目,但我不想滥用add_subdirectory 来适应我的特定开发工具。
【问题讨论】:
-
两种方法都有效。选择取决于您(也就是说,主要是主观的)。正如您已经注意到的,使用
add_subdirectory比使用find_package更简单。如果你想要一个所有优点和缺点的列表,这样的列表会很大,所以它不适合 Stack Overflow。 -
@Alexis:你什么意思?您链接中的博客没有提及“超级项目”。
-
看来
add_subdirectory是一种反模式,应该避免用于树外模块。find_package()是很好的模式,即使它需要使用自定义Find*.cmake来指示模块在哪里(因为正如 OP 所说,他不想安装库)。我不了解自己。我正在阅读很多内容以找到 CMake 的最佳实践。 -
这确实不是主题,但我认为您也应该考虑
externalproject_add。我认为它是find_package比add_subdirectory更好的替代品。
标签: cmake