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

函数简介:
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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a5c679bbcb2effb6343ac8a82d21cd30.html