什么是通过Cmake进行模块集成的良好结构

时间:2013-05-08 14:19:21

标签: cmake

我正在尝试整合一些我们通过CMake制作的不同项目。一般而言,项目并非统一布局,但有一些相似之处。对于每个库,库通常都有我想要维护的测试代码/可执行文件......它们也可以有自己的相互依赖关系。此外,这些库已被保存在单独的存储库中(如果它有所不同,则为mercurial)。文件的相互依赖性如下:

  • 图书馆A是独立的
  • 图书馆B是独立的
  • 图书馆C是独立的
  • 图书馆E依赖于A,B,C
  • 可执行文件1取决于C
  • 可执行文件2取决于E
  • 可执行文件3取决于E

所以每个库通常都是这样布局的

+ LibraryA\
| + CMakeLists.txt
| + LibraryA
| | + CMakeLists.txt
| | + Include\
| | | header.h
| | + Source\
| | | lib.cpp
| + Test\
| | + CMakeLists.txt
| | main.cpp

而不是总体结构

+ Root\
| + CMakeLists.txt
| + LibraryA\
| + LibraryB\
| + LibraryC\
| + LibraryE\
| + Executable1\
| + Executable2\
| + Executable3\

每个文件夹都是自己的子目录项目。这个结构对cmake有意义吗?您如何维护这些项目之间的依赖关系? (如果我改变A,可执行文件3应该重建)?

1 个答案:

答案 0 :(得分:0)

你正在尝试做什么是有道理的。你可以用CMake做到这一点,即使它可能不是很明显如何做得好。我不久前经历了同样的事情,并在这里写了一个问题,接着是一个回答,概述了我最终的解决方案:

CMake: how best to build multiple (optional) subprojects?