如果可执行文件依赖于另一个依赖项已经使用的库,这是不好的做法吗?

时间:2017-11-29 21:27:32

标签: build shared-libraries static-libraries

我当前的项目有两个图书馆libAAAlibBBB。 前者libAAA包含我项目的基本数学和力学(例如国际象棋的规则)。后者libBBB取决于libAAA,但添加了GUI元素(例如,如何绘制单个数字)。

可执行文件取决于libAAAlibBBB。例如。 libBBB用于设置国际象棋游戏,而libBBB用于定义它的外观(console,qt,gtk,...)。

是否可以拥有这样的冗余依赖项,或者它可能是不好的做法?

编辑: 我问这个因为我喜欢将GUI表示与机制分离是多么容易。例如。如果我想改变外观或工具包,我可以添加libHHH,制作另一个可执行文件,然后就可以了。

1 个答案:

答案 0 :(得分:1)

这很好。

让我们看一些替代方案:

  1. 将所有代码从libAAA拉入libBBB :如果libAAA不打算用于其他情况和它们各自的尺寸允许以实际方式完成。但在许多情况下,例如如果libBBB要大得多,libAAA是一个小型可重用库,对于许多项目而言,与libBBB中使用的用户界面框架无关,这不会起作用。

  2. 直接将libBBB使用的代码复制到其中:请不要。这意味着两个独立的图书馆会做很多相同的事情,将来有两个地方需要更新,将来会让你更加困惑,或者是其他任何想要理解它的人,等等。

  3. libBBB代码带入应用程序本身:这根本不可行或不切实际,具体取决于您的开发堆栈和环境。许多应用程序可能还需要为了性能或其他原因而使用不同语言编程和编译的库。

  4. 我可能错过了其他几个替代选项,但尽管冗余,但保留两个依赖关系对我来说似乎是最好的选择。

    正如您在编辑中所述,这也允许您将libBBB替换为另一个也使用libAAA(或其他lib,如果需要)的UI库,而不会拆除任何核心应用程序代码或使依赖项中的任何其他代码无效。