本帖最后由 lzwml 于 2017-3-12 11:27 编辑
此内容由EEWORLD论坛网友lzwml原创,如需转载或用于商业用途需征得作者同意并注明出处
从2014年正式开启linux征程,从终端上打印出 “Hello word”之后就不时地折腾Makefile模板。该模板大约每4-6个月都会发布一个新版本,模板从最初的 10 来行到目前仅仅 Makefile 就达 500 多行,数个外围脚本工具协同工作。
我一直都长期使用该模板,每次切身感受到功能不足时都往上加些特性,待特性达到一定程度后对外发布稳定版本。
当前稳定版本是V1.1,大概这个月内发布V1.2
github地址
https://github.com/MenglongWu/MakeDoxygen
以下情况你可以考虑选择MakeDoxygen
1. 管理多子工程
某项目需要输出多个工程文件,统一用一个总工程管理。
原始做法是将Makefile与当前目录拷贝一个副本,原始Makefile工程输出a.out,新Makefile工程输出b.out,两工程的Makefile规则有很多相识之初,当其中一个Makefile内容变动时,通常也不得不去变动其余拷贝内容,毫无乐趣,倘若子工程更多呢?
MakeDoxygen只有一个总Makefile,与子工程相关的内容只有对应
script/目录下的
filelist.mk 和
project.mk
MakeDoxygen编译做法
make DP=pi3 编译子工程3
make DP=pi2 编译子工程2
make DP=pi1 编译子工程1
make all 编译所有子工程
2. 多编译器切换
3. 快速配置程序版本
图像化配置程序各种版本特性(调试版本、功能特性、发布版本)
从linux内核里提取出mconf工具,以及我写的mkheader将.config转换成autoconfig.h
4. 编译过程高亮显示
黑白屏幕虽然简单,但不够不明了
5. 错误高亮
一大堆白朦朦 abcd 里找 error 有多痛苦
6.版本控制信息(v1.2特性)
程序ELF文件嵌入
.modinfo 段,包含若干信息,其中包括git版本控制的
sha1 节点号
拿到一个用户反馈产品有问题,数周发布一新版本,我怎么知道用户当前使用的是哪个版本,
7. 预编译机制(v1.2特性)
与visual stdio的stdafx.h功能一致,预编译头文件,使得工程后期编译速度加快,尤其是 Qt 工程的编译
8. 多类型输出文件
目前支持生成elf,so、a、bin(编译裸机,用得少)
配置语法参考l
istprj.mk,查阅用
make lp
make DP=pi3 输出 lib-x86/liblb.so lib-x86/liblb.a
make DP=pi2 输出 lib-x86/libla.so lib-x86/libla.a
make DP=pi1 输出 release-x86/default.elf