Makefile 的规则是Make 进行处理的依据,它包括了目标体、依赖文件及其之间的命令
语句。一般的,Makefile 中的一条语句就是一个规则。在上面的例子中,都显示地指出了
Makefile中的规则关系,如“$(CC) $(CFLAGS) -c $< -o $@”,但为了简化Makefile的编写,
make还定义了隐式规则和模式规则,下面就分别对其进行讲解。
1.隐式规则
隐含规则能够告诉make 怎样使用传统的技术完成任务,这样,当用户使用它们时就不
必详细指定编译的具体细节,而只需把目标文件列出即可。Make 会自动搜索隐式规则目录
来确定如何生成目标文件。如上例就可以写成:
OBJS = kang.o yul.o
CC = Gcc
CFLAGS = -Wall -O -g
sunq : $(OBJS)
$(CC) $^ -o $@
为什么可以省略后两句呢?因为Make的隐式规则指出:所有“.o”文件都可自动由“.c”
文件使用命令“$(CC) $(CPPFLAGS) $(CFLAGS) -c file.c –o file.o”生成。这样“kang.o”和
“yul.o”就会分别调用“$(CC) $(CFLAGS) -c kang.c -o kang.o”和“$(CC) $(CFLAGS) -c yul.c
-o yul.o”生成。
模式规则
模式规则是用来定义相同处理规则的多个文件的。它不同于隐式规则,隐式规则仅仅能
够用make 默认的变量来进行操作,而模式规则还能引入用户自定义变量,为多个文件建立
相同的规则,从而简化Makefile的编写。
模式规则的格式类似于普通规则,这个规则中的相关文件前必须用“%”标明。使用模
式规则修改后的Makefile的编写如下:
OBJS = kang.o yul.o
CC = Gcc
CFLAGS = -Wall -O -g
sunq : $(OBJS)
$(CC) $^ -o $@
%.o : %.c
$(CC) $(CFLAGS) -c $< -o $@