从Makefile的角度看,一个可以改善编译效率的地方与其中的隐式规则有关。为了了解make的隐式规则,我们把之前的simple项目的Makefile做一点更改,删除生成.o文件的规则(与隐式规则相对应的是,在Makefile中定义的规则称为显示规则)。
1 .PHONY: clean 2 3 CC = gcc 4 RM = rm 5 6 EXE =simple 7 SRCS =$(wildcard *.c) 8 OBJS =$(patsubst %.c, %.o, $(SRCS)) 9 $(EXE): $(OBJS) 10 $(CC) -o $@ $^ 11 # 12 %.o : %.c 13 $(CC) -o $@ -c $^删除这两句 14 clean: 15 $(RM) -rf $(EXE) $(OBJS)
我们make一下,还是成功了,这就是make存在自带的隐式规则的缘故。
在make中存在大量的隐式规则,通过隐式规则将大大简化Makefile的编写。这里简化后的Makefile之所以能工作,是因为make中有着下面这样的隐式规则:
1 %.o :%.c 2 3 $(CC) -c $(CPPFLAGS) $(CFLAGS) $^
make需要查找隐式规则会降低编译效率,为了禁止使用make所自带的隐式规则,可以通过make 的 -r选项来实现。
所以,隐式规则是可以被覆盖的。当Makefile中自己定义了生成.o的文件规则时,make就以它为规则,该规则覆盖了make自带的隐式规则。更多隐式规则可以查看GNU MAKE。make -r的使用可以提高每个源文件的编译效率。
恰当的书写注释是个好习惯。
Makefile中的注释以“#”开始,注释多行可以在行末加上""。