在手写Makefile时,用上这三个函数非常方便,减少了很多人力劳动哈

用法介绍:

wildcard:  扩展通配符 例如将* 进行匹配

notdir:  去除目录 类似于basename的用法

patsubst: 替换通配符

说起来比较费劲,直接看例子的话,比较好理解

例子介绍:

在test目录下a.cpp和b.cpp,sub目录下c.cpp和d.cpp

建立一个简单的Makefile文件:

src=$(wildcard *.c ./sub/*.c)
dir=$(notdir $(src))
obj=$(patsubst %.c,%.o,$(dir) )
 
all:
 @echo $(src)
 @echo $(dir)
 @echo $(obj)
 @echo "end"

输出结果为:

#wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开
a.cpp b.cpp ./sub/c.cpp ./sub/d.cpp
#notdir把展开的文件去除掉路径信息
a.cpp b.cpp c.cpp d.cpp
#patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o
a.o b.o c.o d.o
来自yaronspace.cn  本文链接:http://yaronspace.cn/blog/archives/1119