patsubst函数
1、简介
patsubst
是GNU Make中的一个函数,用于将模式匹配的字符串替换为指定的字符串,它通常与$(wildcard)
函数结合使用,以便根据文件名模式生成新的文件名。
2、语法
$(patsubst pattern,replacement,word)
pattern
:要匹配的模式字符串。
replacement
:替换后的字符串。
word
:要进行模式匹配的字符串。
3、示例
假设我们有一个名为src/main.c
的源文件和一个名为src/main.cpp
的头文件,我们希望在编译过程中将所有的.c
文件替换为.cpp
,并将所有的.h
文件替换为.hpp
,可以使用以下Makefile:
CPPFILES = $(patsubst %.c,%.cpp,$(wildcard src/*.c)) HPPFILES = $(patsubst %.h,%.hpp,$(wildcard src/*.h)) all: $(CPPFILES) $(HPPFILES) $(CPPFILES): %.o: %.cpp g++ -c $< -o $@ $(HPPFILES): %.o: %.hpp g++ -c $< -o $@
4、注意事项
$(patsubst)
函数会自动删除多余的分隔符,如果模式字符串为*/
,则./test/test.txt/
将被替换为./test/test.txt
。
如果模式字符串中包含通配符(*),需要使用两个连续的百分号(%%)来表示一个字面百分号(%)。%.c
将被替换为.c
,而%%.c
将被替换为一个字面百分号(%)加上一个字符.c
,即.%,c
,这可能会导致一些奇怪的结果,因此在使用时要特别小心。
wildcard函数
1、简介
wildcard
是GNU Make中的一个函数,用于根据文件名模式生成文件名列表,它类似于Unix系统中的ls
命令。
2、语法
$(wildcard pattern)
pattern
:要匹配的文件名模式。
3、示例
假设我们有一个名为src/
的目录,其中包含多个文件,我们希望获取该目录下的所有文件名,可以使用以下Makefile:
SRC_FILES := $(wildcard src/*)
4、注意事项
wildcard
函数返回的文件名列表不包含路径信息,只包含文件名,如果需要完整的路径信息,可以将结果传递给其他函数,如dirname
或pathname
,以生成完整的路径。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/271684.html