一、静态模式
Makefile可以利用一系列工具缩写目标及依赖文件。
<targets>:<target-pattern>:<prereq-pattern>
<command>
其中targets定义了一系列的目标文件,可以有通配符,是一个目标文件的集合。
target-pattern指明targets模式,目标集模式;
prereq-pattern指明目标依赖模式
如果target-pattern定位%.o,则目标文件集合都是以.o结尾的文件;而如果prereq-pattern定位%.c,则对target-pattern所形成的目标进行二次定义,其方法为取目标模式中的”%”,并为其加上.c的结尾。
如
objects=a.o b.o
all:$(objects)
$(objects) %.o:%.c
gcc -c $(CFLAGS) $< -o $@
二、自动生成依赖项
大多数的编译器都支持-M选项,即自动寻找源文件中包含的头文件,并生成一个依赖关系,如main.c中包含defs.h,则cc -M main.c,输出main.o:main.c defs.h
GNU组织建议将每一个源文件的自动生成的依赖关系放到一个文件中,为每一个name.c的文件都生成name.d的makefile文件。name.d文件中存放了name.c的文件依赖关系。于是可以写出.c和.d文件依赖关系,并将其包含在主Makefile即可以自动化的生成每一个文件的依赖关系。
之后在补充详细的。
%.d:%.c
@set -e rm -f $@\
$(CC) -M $(CFLAGS) $< > $@.$$$$ \
sed 's,\($*\)\.o[ :]*,\1.o $@ ,g' < $@.$$$$ > $@\
rm -f $@.$$$$
其中的$$$$表示随机编号