【patsubst函数】

【patsubst函数】makefilepatsubst函数

格式:$(patsubst ,,

)

名称:模式字符串替换函数——patsubst。
功能:查找

中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式,如果匹配的话,则以替换。

   这里,可以包括通配符“%”,表示任意长度的字串。如果中也包含“%”,那么,中的这个“%”将是中的那个“%”所代表的字串。

   (可以用“\”来转义,以“%”来表示真实含义的“%”字符)

返回:函数返回被替换过后的字符串。

示例:

$(patsubst %.c,%.o, a.c b.c)
把字串“a.c b.c”符合模式[%.c]的单词替换成[%.o],返回结果是“a.o b.o”

make中有个变量替换引用

对于一个已经定义的变量,可以使用“替换引用”将其值中的后缀字符(串)使用指定的字符(字符串)替换。格式为“ ( V A R : A = B ) ”(或者“ (VAR:A=B)”(或者“ (VAR:A=B)(或者{VAR:A=B}”),
意思是,替换变量“VAR”中所有“A”字符结尾的字为“B”结尾的字。“结尾”的含义是空格之前(变量值多个字之间使用空格分开)。而对于变量其它部分的“A”字符不进行替换。
例如:
foo := a.o b.o c.o
bar := $(foo:.o=.c)

在这个定义中,变量“bar”的值就为“a.c b.c c.c”。使用变量的替换引用将变量“foo”以空格分开的值中的所有的字的尾字符“o”替换为“c”,其他部分不变。
如果在变量“foo”中如果存在“o.o”时,那么变量“bar”的值为“a.c b.c c.c o.c”而不是“a.c b.c c.c c.c”。

例子:

使用以下3个内置函数

1、wildcard : 扩展通配符
2、notdir : 去除路径
3、patsubst :替换通配符

建立一个测试目录,在测试目录下建立一个名为sub的子目录
$ mkdir mk
$ cd mk
$ mkdir sub

在mk下,建立a.c和b.c 2个文件,在sub目录下,建立aa.c和bb.c 2 个文件

建立一个简单的Makefile
src= ( w i l d c a r d ∗ . c . / s u b / ∗ . c ) f i l e = (wildcard *.c ./sub/*.c) file= (wildcard.c./sub/.c)file=(notdir ( s r c ) ) o b j = (src)) obj= (src))obj=(patsubst %.c,%.o,$(src) )

all:
  @echo $(src)  
  @echo $(file)
  @echo $(obj)

执行结果分析:
第一行输出:
a.c b.c ./sub/aa.c ./sub/bb.c

wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。

第二行输出:
a.c b.c aa.c bb.c
notdir把展开的文件去除掉路径信息

第三行输出:
a.o b.o aa.o bb.o

( p a t s u b s t (patsubst %.c,%.o, (patsubst(src) )中,patsubst把 ( f i l e ) 中的变量符合后缀是 . c 的全部替换成 . o ,任何输出。或者可以使用 o b j = (file)中的变量符合后缀是.c的全部替换成.o, 任何输出。 或者可以使用 obj= (file)中的变量符合后缀是.c的全部替换成.o,任何输出。或者可以使用obj=(file:%.c=%.o)
效果也是一样的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34151.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注