将C++应用程序划分为库

ami*_*mit 4 c++

我的C++项目越来越大.我们现在也开始使用cmake进行构建.我想将应用程序划分为库,以便它们可以链接进行测试,准备应用程序包等.现在我将我的代码分成如下库:

  • 核心
  • GUI
  • 实用程序(核心和其他组件使用它们)
  • io(使用核心类的打印函数进行xml解析/输出)
  • 测试(单元测试)
  • 模拟器(测试核心)

另一种方法是根据目录结构进行划分 - 每个目录有一个库.但是从我过去的经验来看,它导致了太多的库,然后在链接期间难以处理库依赖性.

这方面有什么最佳做法吗?

Mar*_*ork 5

坐下来拿一张纸,决定你的图书馆架构.

该库应设计为一组级别.

  • A级(基础)上的库应仅在系统库上具有依赖关系,并且仅在它必须在A级库上时才具有依赖关系.
  • B级上的库可以依赖于A级和系统库中的库,只有它必须位于B级上的库中.
  • 等等

每个图书馆都应代表其特定级别的完整工作.较低级别的事情通常会有较小的工作,但很多.更高级别的库应该重新发送完整的任务.即没有用于windows对象的lib和用于事件的lib.在这个级别,这里的工作是手动与窗口的所有交互(这包括它与事件的交互方式).

您似乎已经确定了一些合理的功能组.唯一一个看起来有点可疑的是io.如果你真的有一些通用的IO例程,可以提供真正的功能.但是,如果只是将IO分组为一堆不同的对象,那么我会废弃它(这完全取决于使用情况).

所以下一步是确定它们之间的关系.

至于使用目录结构.通常,一个目录中的所有内容都将出现在同一个库中,但这并不排除其他目录的可用性.我会避免将一半的类放在libA的目录中,另一半的类放在libB等中.