函数简介:
1、wildcard : 扩展通配符
2、notdir :去除路径
3、patsubst :替换通配符
实例:
建立一个 test 目录,在测试目录下建立一个名为 sub 的子目录
$ mkdir test
$ cd test
$ mkdir sub
在 test 下,建立 a.c 和 b.c 两个文件,在 sub 目录下,建立 sa.c 和 sb.c 两个文件
写出一个简单的 Makefile
src = $(wildcard *.c ./sub/*.c)
dir = $(notdir $(src))
obj = $(patsubst %.c,%.o,$(dir) )
all:
@echo $(src)
@echo $(dir)
@echo $(obj)
@echo "end"
执行结果分析:
第一行输出:
a.c b.c ./sub/sa.c ./sub/sb.c
wildcard 把指定目录 ./ 和 ./sub/ 下的所有后缀是 c 的文件全部展开。
第二行输出:
a.c b.c sa.c sb.c
notdir 把展开的文件去除掉路径信息。
第三行输出:
a.o b.o sa.o sb.o
在 $(patsubst %.c, %.o, $(dir)) 中,patsubst 把 $(dir) 中的变量符合后缀是 .c 的全部替换成 .o。
或者可以使用
obj = $(dir:%.c=%.o)
效果也是一样的。
这里用到 makefile 里的替换引用规则,即用用户指定的变量替换另一个变量。
它的标准格式是
$(var:a=b) 或 ${var:a=b}
它的含义是把变量 var 中的每一个值结尾用 b 替换掉 a