一、概述
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/zh-tw/n/303777.html