Gnu Makefile 阅读笔记(2)

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 $@

你可能感兴趣的:(Gnu Makefile 阅读笔记(2))