ArcCore重构-Makefile模块化

时间:2022-06-26 16:31:18
基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5
 
基本问题
2. 编译系统中代码文件是否编译及目标文件集中定义在boards/board_common.mk,而非分属各自模块;
 
每个模块的应当有自己的文件夹,并且有自己的Makefile。在这个Makefile文件中,根据该模块相关的配置开关,决定是否编译某些目标文件。全局范围内涉及到各模块的只有相关的配置开关。这样可以降低耦合,使代码模块化更清晰。
 
结构如下:
ArcCore重构-Makefile模块化

每个模块的Makefile类似如下:

ArcCore重构-Makefile模块化

如果目标文件在子目录中,则以斜杠(/)结尾。

ArcCore重构-Makefile模块化

如果是目标文件直接跟在后面即可。

 
那么如何将每个模块目录下的Makefile导入呢?需要编写Makefile代码。如下:

ArcCore重构-Makefile模块化

可以参考Linux kernel的写法。不过需要多个Makefile文件和sub-make进程配合。

这里我们选择简单实现,在一个Makefile里面导入所有需要的Makefile。
 
首先,需要大量使用eval来执行Makefile代码片段;
其次,面临把递归改变为循环的问题。需要把Linux kernel那种递归的方法,改编为循环导入。即是把深度优先遍历,改为广度优先遍历。循环的次数,即为遍历的深度。
 
所以先找到深度最深的Makefile文件。然后每一次引入下一级目录下的Makefile文件。