Makefile项目管理
一、说明
1)功能说明
1.能自动添加头文件路径
2.能自动查找 c文件并编译
3.可对指定文件夹配置编译规则
4.此项目管理的功能及复杂度虽小,但适用性挺强的(管理小中型项目应该没有问题 0_0 ) ``
2)适用范围
适用于linux平台下项目管理。
3)关于作者
1.此项目管理开源(GPL),但是在使用或转载时请标注出处,感谢使用(虽然简单,花了点时间 (-_-)! )
2.如果有bug或者其它问题可联系 QQ(露.舒达): 2085827949
二、相关文件及说明
.
├── bin_dir # 项目文件生成路径
│ ├── bin_lap.bin # 最终可执行文件
│ ├── dis_lap.dis # 符号排列表
│ ├── lap_3.S # 反汇编文件
│ └── lap.a # 临时文件(编译中间文件)
├── github.sh # git管理脚本
├── LapLib # 打算构建一个自己的库(封装一下常用函数,暂未实现)
│ └── common
│ └── LapInc.mk # 用于添加要链接的动态库
├── LapManager # 项目管理核心文件
│ ├── getdir.sh # 用于搜寻.h与.c文件,并将将自动生成的文件存放在.auto_dir目录中
│ ├── makeRull.mk # 子Makefile编译规则
│ └── mkconfig.mk # 用于配置Makefile的编译规则
├── .auto_dir # 由getdir.sh自动生成
│ ├── lap_alib.mk # 编译后文件路径
│ ├── lap_head.mk # 项目所有头文件路径
│ └── Makefile # 要编译的路径
├── LICENSE
├── Makefile # 顶层Makefile,导出环境变量,运行getdir.sh ,生成追终可执行文件
├── mk # 编译脚本,可用做一系列复杂动作(eg: 指定ARM GCC路径)
├── project # 工程文件夹(任意命名)
│ ├── lap_bin.o # 生成的的库文件,最终由顶层Makefile生成可执行文件
│ ├── main.c
│ ├── main.h
│ ├── main.o
│ └── Makefile # 子Makefile,每个要编译的文件夹必须包含此Makefile
└── ReadMe.txt # 介绍文件
三、工作原理当在顶层文件夹’make’
时,会执行顶层目录Makefile。
1)顶层Makefile会执行以下工作:
1.导出环境变量GCC交叉编译链
2.导入配置文件(LapManager/mkconfig.mk)
3.创建bin_dir与.auto_dir文件夹
4.执行脚本(LapManager/getdir.sh),用于搜寻头文件与c文件并确定要编译的文件路径,并将搜寻结果生成对应文件放入.auto_dir/文件中
5.执行.auto_dir/Makefile 编译项目
6.链接所有子文件夹下的lap_bin.o
7.生成最终可执行文件bin_dir/bin_lap.bin8.生成反汇编文件及dis文件
2)自动搜寻脚本 getdir.sh
1.将搜寻到的头文件路径写入.auto_dir/lap_head.mk文件中(编译时会自动包含此配置文件)
2.在项目工程中搜寻Makefile文件,将搜寻到的路径写入.auto_dir/Makefile
代表将来要编译的目录
3.在项目工程中搜寻Makefile文件,将搜寻到的路径写入.auto_dir/lap_alib.mk 代表将来要链接的库路径
4.在搜寻时会匹配mkconfig.mk中’CONFIG_DONT_SCAN’变量,用于屏蔽特定文件夹
3)编译规则
每个子Makefile都会包含LapManager/makeRull.mk ,makeRull.mk会自动寻找当前目录下的c文件,
并按照规则编译成静态库文件(最终由顶层Makefile链接), 故而,每个要编译的文件目录必须要
包含此Makefile,当然子Makefile也可以单独设置编译规则,例如 是否静默编译,是否手动指定 编译文件等,灵活性较高。
4)其它说明
1.配置文件: 编译时的一些特性可以通过LapManager/mkconfig.mk文件进行指定,例如,是否禁止某一文件夹参与编译。
2.链接动态库: 指定动态库链接,可通过修改LapLib/common/LapInc.mk来达到目的。
3.所有的文件名,以及编译好的路径,都可以自定义(通过修改顶层Makefile对应的名称即可)
4.一定要赋予脚本文件对应的执行权限 (可使用命令: sudo chomd -R 755 ./ )
四、项目管理链接
Gitee:Makefile项目管理链接