一、概述
patsubst是一个GNU Make中的字符串操作函数,用于将文件名中的模式进行字符串替换,得到新的文件名。它的格式如下:
$(patsubst PATTERN,REPLACEMENT,TEXT)
其中,PATTERN是需要被替换的模式,REPLACEMENT是用于替换的字符串,TEXT是源字符串。patsubst会扫描TEXT,找到其中与PATTERN匹配的部分,并将它们替换成REPLACEMENT,生成新的字符串。
二、基础用法
我们来看一个简单的例子:
$(patsubst %.c, %.o, foo.c bar.c)
这个语句的作用是,将字符串”foo.c bar.c”中所有以.c结尾的部分替换成以.o结尾的字符串,生成”foo.o bar.o”。这在编译C程序时非常常见。
patsubst也支持将模式中的通配符(%)进行替换,例如:
$(patsubst %hello, %world, hello kitty bonjour hello)
这个语句的作用是,将字符串”hello kitty bonjour hello”中所有以hello结尾的部分替换成以world结尾的字符串,生成”world kitty bonjour world”。
三、高级用法
1. 多个模式和替换字符串
patsubst也支持多个模式和替换字符串的操作,例如:
$(patsubst %.c, %.o, $(wildcard *.c))
这个语句的作用是,将当前目录下所有以.c结尾的文件名替换成以.o结尾的文件名,并返回替换后的文件名列表。
2. 去掉前缀和后缀
patsubst还可以用于去掉前缀和后缀,例如:
$(patsubst src/%.c, obj/%.o, $(wildcard src/*.c))
这个语句的作用是,将src目录下所有以.c结尾的文件名替换成obj目录下以.o结尾的文件名,生成替换后的文件名列表。
另外,还可以用patsubst去掉文件名的后缀,例如:
$(patsubst %.o, %.c, foo.o bar.o)
这个语句的作用是,将字符串”foo.o bar.o”中所有以.o结尾的部分替换成以.c结尾的字符串,生成”foo.c bar.c”。
3. 混合使用
patsubst还可以和其他函数一起使用,例如:
$(addprefix obj/, $(patsubst %.c, %.o, $(wildcard src/*.c)))
这个语句的作用是,先找到src目录下所有以.c结尾的文件,然后将它们替换成以.o结尾的文件,在文件名前面加上”obj/”前缀,生成一个对象文件列表。
四、结论
patsubst是GNU Make中一个非常常用且非常强大的字符串操作函数,它可以帮助我们在Makefile中快速、灵活地对文件名进行处理。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/303777.html