foreach
语法如下:
$(foreach var, list, text)
具体实例:
A = a b C
B = $(foreach f, $(A), $(f).o)
all:
@echo B = $(B)
结果:
filter / filter-out
语法如下:
$(filter pattern..., text) # 在text中取出符合patten格式的值
$(filter-out pattern...., text) # 在text中取出不符合patten格式的值
实例:
C = a b c d/
D = $(filter %/, $(C))
E = $(filter-out %/, $(C))
all:
@echo D = $(D)
@echo E = $(E)
结果:
D = d/
E = a b c
Wildcard
语法如下:
$(wildcard pattern) # pattern定义了文件名的格式, wildcard取出其中存在的文件。
这个函数 wildcard 会以 pattern 这个格式,去寻找存在的文件,返回存在文件的名字。
实例:(在该目录下创建三个文件:a.c b.c c.c)
files = $(wildcard *.c)
all:
@echo files = $(files)
结果:
files = a.c c.c b.c
同时还可以利用其函数的特点来判断文件是否存在
实例:
files2 = a.c b.c c.c d.c e.c abc
files3 = $(wildcard $(files2))
all:
@echo files3 = $(files3)
结果:
files3 = a.c b.c c.c
patsubst
语法如下:
$(patsubst pattern, replacement, $(var))
patsubst 函数是从var变量中取出每一个值,如果这个符合patten格式,把它替换成 replacement 格式
实例:
files2 = a.c b.c c.c d.c e.c abc
dep_files = $(patsubst %.c, %.d, $(files2))
all:
@echo dep_files = $(dep_files)
结果:
dep_files = a.d b.d c.d d.d e.d abc