1、使用wildcard 和 patsubst函数
wildcard函数用来提取符合目标扩展名的文件,用法是$(wildcard pattern)
patsubst函数用来将目标扩展名的文件变换成另一种扩展名,用法如$(patsubst %.c,%.o,$(wildcard *.c)),功能是将所有扩展名为.c的文件转换为扩展名为.o的文件
objects := $(patsubst %.c,%.o,$(wildcard *.c))
foo : $(objects)
cc -o foo $(objects)
2、VPATH搜索路径
搜索的目标路径如果有多个,中间需要用冒号隔开
VPATH = path1 : path2 : path3
如果当前路径种不存在这样的文件的话,则依次在path1、path2和path3种寻找
3、vpath搜索路径
vpath %.h ../headers
在目录../headers中寻找扩展名为.h的文件
vpath %.c foo:bar
先在目录foo中寻找扩展名为.c的文件;而后在目录bar中寻找
4、特殊标记符的使用
foo.o : foo.c
cc -c $(CFLAGS) $^ -o $@
$^自动搜索路径,$@表示目标程序名
VPATH = src:../headers
foo.o : foo.c def.h hack.h
cc -c $(CFLAGS) $< -o $@
objects = foo.o bar.o
all: $(objects)
$(objects): %.o : %.c
$(CC) -c $(CFLAGS) $< -o $@