Makefile
1.规则
Makefile的框架是由规则构成的。make命令执行时先在Makefile文件中查找各种规则,对各种规则进行解析后运行规则。规则的基本格式为:
每条规则的语法格式:
target1,target2...: depend1, depend2, ...
command
......
......
每条规则由三个部分组成分别是目标(target)
, 依赖(depend)
和命令(command)
。
命令(command)
: 当前这条规则的动作,一般情况下这个动作就是一个 shell 命令 例如:通过某个命令编译文件、生成库文件、进入目录等。 动作可以是多个,每个命令前必须有一个Tab缩进并且独占占一行。依赖(depend)
: 规则所必需的依赖条件,在规则的命令中可以使用这些依赖。 例如:生成可执行文件的目标文件(*.o)可以作为依赖使用 如果规则的命令中不需要任何依赖,那么规则的依赖可以为空 当前规则中的依赖可以是其他规则中的某个目标,这样就形成了规则之间的嵌套 依赖可以根据要执行的命令的实际需求, 指定很多个目标(target)
: 规则中的目标,这个目标和规则中的命令是对应的 通过执行规则中的命令,可以生成一个和目标同名的文件 规则中可以有多个命令, 因此可以通过这多条命令来生成多个目标, 所有目标也可以有很多个 通过执行规则中的命令,可以只执行一个动作,不生成任何文件,这样的目标被称为伪目标
这里看着脑疼,举个例子
################# 例1 #################
app:a.c b.c c.c
gcc a.c b.c c.c -o app
################# 例2 #################
# 有多个目标, 多个依赖, 多个命令
app,app1:a.c b.c c.c d.c
gcc a.c b.c -o app
gcc c.c d.c -o app1
################# 例3 #################
# 规则之间的嵌套
app:a.o b.o c.o
gcc a.o b.o c.o -o app
# a.o 是第一条规则中的依赖
a.o:a.c
gcc -c a.c
# b.o 是第一条规则中的依赖
b.o:b.c
gcc -c b.c
# c.o 是第一条规则中的依赖
c.o:c.c
gcc -c c.c
2.规则的执行
在调用 make 命令编译程序的时候,make 会首先找到 Makefile 文件中的第 1 个规则,分析并执行相关的动作。
但是需要注意的是,好多时候要执行的动作(命令)中使用的依赖是不存在的,如果使用的依赖不存在,这个动作也就不会被执行。