示例:
①基础,根据最基础的规则编写。这条规则的作用:判断这些依赖文件,如果发现某个依赖文件被修改过(make会比较依赖文件和目标文件的时间,比如比目标文件时间新,认为被修改过),就会执行命令,来重新生成目标文件。简单暴力,但是效率低
test : main.c sub.c sub.h gcc -o test main.c sub.c
②效率高,相似规则太多太啰嗦,不支持检测头文件
test : main.o sub.o #当我们make时没有指定目标,就会去Makefile里查找第一个目标。 gcc -o test main.o sub.o main.o : main.c gcc -c -o main.o main.c sub.o : sub.c gcc -c -o sub.o sub.c
clean:
rm *.o test
③使用通配符,消除重复规则,效率高,精炼,不支持检测头文件
test : main.o sub.o gcc -o test main.o sub.o %.o : %.c gcc - c -o $@ $< clean: rm *.o test -f
④效率高,精炼,支持检测头文件(但是需要手工添加头文件规则)
test : main.o sub.o gcc -o test main.o sub.o %.o : %.c gcc -c -o $@ $< sub.o : sub.h clean: rm *.o test -f
⑤效率高,精炼,支持自动检测头文件
objs := main.o sub.o test : $(objs) gcc -o test $^ # 需要判断是否存在依赖文件 # .main.o.d .sub.o.d dep_files := $(foreach f, $(objs), .$(f).d) dep_files := $(wildcard $(dep_files)) # 把依赖文件包含进来 ifneq ($(dep_files),) include $(dep_files) endif %.o : %.c gcc -Wp,-MD,.$@.d -c -o $@ $< clean: rm *.o test -f distclean: rm $(dep_files) *.o test -f