Makefile完全DIY
现在感觉自己一点实力都没有(跟被Cisco完拒有很大关系),稍微有点进步就迫不及待的记下来,生怕将来又尽受气。
本来makefile就是DIY的,可是今天培训的时候昏昏欲睡,自己整了点小活,把组里用的2000行的Makefile精简到120行的样子。增加了“强大”的手动设置功能,已经不需要加一个case或者加一条line就改一遍makefile了。
主要参考资料是著名的<<跟我一起写makefile(陈皓,编程的修养的作者)>>
先来认识makefile: make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。
然后makefile最最基本的规则:
target ... : prerequisites ...
command
这是一个文件的依赖关系,也就是说,target 这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。
然后自己最受益的几个原则,也是能把那个2000行的makefile精简到120行的几个规则:
1. 定义命令组合:
define run_command
$(COMMAND_A)
$(COMMAND_B)
...
endef
2. 自动化变量
- 例如:"%.c"表示以".c"结尾的文件名(文件名的长度至少为3),而"s.%.c"则表示以"s."开头,".c"结尾的文件名(文件名的长度至少为5)。
- %.o : %.c ;
- $*, 这个变量表示目标模式中"%"及其之前的部分。如果目标是"dir/a.foo.b",并且目标的模式是"a.%.b",那么,"$*"的值就是"dir/a.foo"
3. make A B C. 顺序执行,make A, make B, make C.这样的优点很明显,这就是所有自定义编译随意性的基础,因为可以定义很多“个性但是又公用”的Target,然后C可以是一个公用的的Target。这样的话,配合cpp宏,真的不是一般的爽。
第一个原则能够简化命令的重用,第二个原则使得makefile兼容性和DIY成分大增

没有评论:
发表评论