浅尝辄止14-Makefile小知识

开发人员应该都用过Makefile吧,一个巨大的项目,只要输入Make,顺利的话,就一切搞定了,有没有总统按核弹按钮的感觉?

简介

关于Makefile有2个基本概念——目标文件依赖文件。简单来说目标文件就是要生成的文件,依赖文件就是要生成这个目标文件前,先要生成的文件。其基本结构如下

#这个写法就是 目标文件0 依赖 目标文件1
目标文件0:目标文件1
[tab]执行各种操作生成目标文件0,当然也可以做任何事

目标文件1:
[tab]执行各种操作生成目标文件1,当然也可以做任何事

当执行make 目标文件名0时,目标文件名1的生成操作就会被执行,因为依赖关系,要先生成1再来生成0,所以先执行生成1的操作,再执行生成0的操作。
Makefile的一大特点就是,不需要重新生成的文件就不重新生成,也就是说,不用随便改一个文件就要把整个工程都重build一遍,只要重新生成那些受到修改影响的文件就好了。例如,在下面例子中,如果执行make targetfile2,则根据依赖关系Makefile会先检查targetfile0是不是比1新,如果是,就重新生成1,以此类推,决定2是否要重新生成。如果targetfile0比1旧,1比2旧,则所有生成动作都不会做。
再比如,如果我修改了targetfile1,则只有targetfile2会重新生成,targetfile0不会,这符合它们的依赖关系。

targetfile2: targetfile1
[tab]生成targetfile2
targetfile1: targetfile0
[tab]生成targetfile1
targetfile0:
[tab]生成targetfile0

投机取巧

$@

$@代表目标文件,以下两个写法效果等价

target:
    echo target
target:
    echo $@

$^

$^代表所有依赖文件,以下两个写法效果等价

target: f0 f1 f2 f3
    echo f0 f1 f2 f3
target: f0 f1 f2 f3
    echo $^

$<

$<代表第一个依赖文件

target: f0 f1
    echo f0
target: f0 f1
    echo $<

今天有程序员的日常活动——加班,所以简单地写一篇,质量不高(难道前面写的质量高?),并不惭愧。

你可能感兴趣的:(浅尝辄止14-Makefile小知识)