测试场景:
创建test目录,目录下创建a.c和b.c两个文件。创建子目录sub,在子目录下创建sa.c和sb.c两个文件。
一.通用函数
1.wildcard
在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTERN…) 。在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。
src=$(wildcard *.c ./sub/*.c)
all:
@echo $(src)
# bash 中执行 make
$ make
a.c b.c ./sub/sa.c ./sub/sb.c
二.字符串函数
1.模式字符串替换函数: $(patsubst <pattern>,<replacement>,<text>)
功能: 查找中的单词(单词以”空格”, “tab”, “换行”来分割) 是否符合 , 符合的话, 用 替代.
返回: 替换过的字符串
src=$(wildcard *.c ./sub/*.c)
obj=$(patsubst %.c,%.o,$(src) )
all:
@echo $(obj)
# bash 中执行 make
$ make
a.o b.o ./sub/sa.o ./sub/sb.o
2.过滤函数: $(filter <pattern…>,<text>)
功能: 以 <pattern>模式过滤字符串 <text>, 保留 符合模式 <pattern> 的单词, 可以有多个模式
返回: 符合模式 <pattern> 的字符串
src=$(wildcard *.c ./sub/*.c)
fil=$(filter a.c, $(src))
all:
@echo $(fil)
# bash 中执行 make
$ make
a.c