$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表
%.o:表示所用的.o文件
%.c:表示所有的.c文件
==============================================================
例, Makefile:
objs := a.o b.o
test:$(objs)
gcc -o test $^
# .a.o.d .b.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