工程管理器-make的配置文件-makefile的书写格式以及原理

第一,世界上最简单的makefile

wh@ubuntu:~$ cat Makefile -n

       1 funny:

       2         echo “just for fun”

wh@ubuntu:~$ make

echo “just for fun”
just for fun

这个最简单的makefile只有两行,包含了其最核心的语法

第一行,funny被称为目标,后面有一个冒号,冒号后面是这个目标的依赖列表,这个例子funny的依赖列表为空

第二行,行首是一个制表符(既Tab健),这个制表符很重要,不能写成空格,更不能省略,其后紧跟一个shell语句(因为有了

               制表表符,make才知道后面的是一个shell命令)

注:第一行目标和其后的列表(可以没有),第二号的shell命令(可以没有),统称为一套规则。

我们在该 Makefile 所在目录执行 make 命令,结果打印一句“just for fun”。整个过程中发生的事情如下:

         首先make判断funny这个目标的依赖列表是否存在,如果存在则判断他们和目标文件的时间戳关系,其次判断目标funny是否存在,是则退出,否则执行shell命令。


第二,世界上倒数第二简单得makefile

wh@ubuntu:~$ cat Makefile -n
1 image:a.o b.o x.o y.o
2       gcc a.o b.o x.o y.o -o image
3
4 a.o:a.c
5       gcc a.c -o a.o -c
6 b.o:b.c
7       gcc b.c -o b.o -c
8 x.o:x.c
9       gcc x.c -o x.o -c
10 y.o:y.c
11     gcc y.c -o y.o -c

此时目标是 image,而其依赖则是四个.o 文件,而且,这四个.o 文件本身也是目标,他们依赖于其对应的.c 文件

这个 Makefile 的工作流程是:
1,找到由终极目标构成的一套规则。(第 1 行和第 2 行)
2,如果终极目标及其依赖列表都存在,则判断他们的时间戳关系,只要目标比任何一
个依赖文件旧,就会执行其下面的 Shell 命令。
3,如果有任何一个依赖文件不存在,或者该依赖文件比该依赖文件的依赖文件要旧,
则需要执行以该依赖文件为目标的规则的 Shell 命令。(比如 a.o 如果不存在或者比 a.c 要
旧,则会找到第 4 行和第 5 行这一套规则,并执行第 5 行的 Shell 命令)
4,如果依赖文件都存在并且都最新,但是目标不存在,则执行其下面的 Shell 命令。


           本例中,一开始所有的.o 文件都是不存在的,因此会执行第 5、第 7、第 9、第 11 行,
分别生成 a.o、b.o、x.o 和 y.o,等这些文件都准备妥当了,将会执行第 2 行生成最终的
目标文件 image。随后如果对任何一个源文件进行了修改(比如 x.c),执行 make 的时候
将会发现其对应的.o 文件(a.o)比该源文件(a.c)要旧,因此就会自动地重新编译(第 9
行),然后根据一样的原理,终极目标文件 image 也被重新编译。

猜你喜欢

转载自blog.csdn.net/w6655515/article/details/81703932