在手写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