文章目录
1 foreach
语法:
$(foreach var,list,text)
作用:
对变量list中的每一个组成部分(以空格来分割)赋值给变量var,然后将var按照text的格式进行扩展。
示例:
A = a b c
B = $(foreach f, $(A), $(f).o)
all:
@echo B = $(B)
结果:
B = a.o b.o c.o
2 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
3 wildcard
语法:
$(wildcard pattern)
:pattern定义了文件名的格式。
有如下两个作用:
1. 可以用来获取当前目录下指定格式的所有文件名。
2. 可以用来取出其中真实存在于当前目录下的文件。
3.1 举例:获取当前目录下指定格式的所有文件名
假设当前目录有文件a.c、b.c、c.c。
files = $(wildcard *.c)
all:
@echo files = $(files)
结果:
files = a.c b.c c.c
3.2 举例:获取当前目录下真实存在的所有文件名
假设当前目前有文件a.c、b.c、c.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
4 patsubst
语法:
$(patsubst pattern,replacement,$(var))
:从var变量里面取出每一个值,如果符合pattern格式,把它替换成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