我正在为嵌入式系统(dsPIC33平台)编写C代码,我正在考虑构建一个可重用的代码库,以便在多个项目中使用.
将库绑定到每个项目的最佳实践是什么?
显然,库将具有一些特定于硬件(因此特定于项目)的依赖关系,因此可以合理地假设它将与每个项目一起编译(而不是以二进制形式链接).
到目前为止我所提出的是保持库集中,但需要一个特定于项目的libraryConfig.h,其中包括函数定义,宏等.这要求库在其自己的代码中包含头,这意味着项目源目录需要在include路径中(而不仅仅是库源目录).那种食堂之间的区别#include ""和#include <>,不是吗?
这是正常的吗?
一个非常好的问题和答案并不简单.需要考虑的几件事情.以下是我迄今为止的一些观点.
通用代码与项目本地副本
一个重要的决定是,是否使用从中央位置(贵公司的"重用库")自动更新的"通用"库代码,或者是否保留项目本地副本.
中央图书馆的好处是,一次完成的工作可以使许多项目受益.项目本地副本的难点在于任何错误修复和改进都不会回馈到中央库,并且中央库中的任何错误修复都可能无法进入您的项目.
但是使用中央图书馆的一个潜在困难是,如果他们的特定人员以不受控制的方式修改它以适应他们的项目,并且无意中打破了其他项目.我亲眼看到,在"常见"代码中充满了#ifdefs并且经常打破其他项目.
为了从公共代码(即中央重用库)中获得良好的价值:
图书馆:
个别项目:
如果公司没有这样的流程,那么项目应该只制作一段代码的本地副本(比如从以前的项目中复制),然后从那时起承担全部项目本地责任.在这种情况下,您仍然可以从重用中获得一些好处,因为您不是从头开始重写它.
项目特定配置
如果代码需要特定于项目的配置,理想情况下应该尽可能保持代码的一小部分 - 而不是分散在一堆源文件中.理想情况下,单个头文件.但很可能是一个.C文件(比方说,如果你需要定义一些查找表).该库应提供一个模板,其中的选项已得到很好的评论.
有关如何完成此操作的一个很好的示例,请参阅Micrium的 Jean Labrosse 的μC/ OS-II RTOS(书).