举例分析 Makefile 中的 patsubst、wildcard、notdir 函数

时间:2022-09-09 10:43:43

函数简介:

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

参考自:blog.csdn.net/srw11/article/details/7516712