在 Makefile 中,$(patsubst pattern,replacement,text) 是一个用于模式替换的函数,它可以将文本中符合指定模式的部分替换为指定的字符串。这个函数通常用于对文件名或路径进行模式匹配和替换,非常适合在 Makefile 中进行文件名的转换操作。
语法:
makefile
Copy Code
$(patsubst pattern,replacement,text)
参数:
pattern:要匹配的模式,可以包含通配符 * 和 ?。
replacement:要替换成的字符串。
text:要进行模式替换的文本。
示例:
makefile
Copy Code
SOURCES := file1.c file2.c file3.c
OBJECTS := $(patsubst %.c,%.o,$(SOURCES))
在这个例子中, ( p a t s u b s t (patsubst %.c,%.o, (patsubst(SOURCES)) 将会把 SOURCES 变量中以 .c 结尾的文件名替换为以 .o 结尾的文件名,最终将得到 OBJECTS 变量的赋值结果为 “file1.o file2.o file3.o”。
另一个示例:
makefile
Copy Code
VPATH := src include
OBJS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(notdir $(wildcard $(addprefix $(VPATH)/,*.c))))
在这个示例中, ( p a t s u b s t (patsubst %.c, (patsubst(OBJ_DIR)/%.o,$(notdir $(wildcard $(addprefix $(VPATH)/,*.c)))) 将会对 VPATH 目录下的所有 .c 文件进行处理,将其替换成输出目录 OBJ_DIR 中对应的 .o 文件名,并且将处理后的结果赋值给 OBJS 变量。
总之,$(patsubst pattern,replacement,text) 函数在 Makefile 中非常有用,可以帮助我们对文件名进行模式匹配和替换,从而实现灵活的文件处理和路径转换。