1、过滤函数filter 和 filter-out
GOALS = install clean debug all
函数:filter
模板:$(filter pattern…,text)
功能:1)过滤掉字串“text”中所有不符合模式“pattern”的单词,保留所有符合此模式的单词。
2)存在多个模式时,模式表达式之间使用空格分割。
示例:gmake test
结果:Bad Target
ifeq ($(filter $(GOALS),$(MAKECMDGOALS)),)
@echo "Bad Target"
endif
函数:filter-out
模板:$(filter-out pattern…,text)
功能:1)和“filter”函数实现的功能相反。过滤掉字串“text”中所有符合模式“pattern”的单词,保留所有不符合此模式的单词。
2)存在多个模式时,模式表达式之间使用空格分割。
示例:gmake test
结果:Bad Target
ifneq ($(filter-out $(GOALS),$(MAKECMDGOALS)),)
@echo "Bad Target"
endif
2、字符串替换函数subst、patsubst、$(var:pattern=replacement)
函数:subst
模板:$(subst from,to,text)
功能:把字串“ text”中的“ from”字符替换为“ to”
示例:gmake
结果:a.o b.o.o
SRC = a.c b.c.c
OBJ = $(subst .c,.o,$(SRC))
Default:
@echo $(OBJ)
函数:patsubst
模板:$(patsubst pattern,replacement,text)
功能:1)将字串“ text”中符合模式“pattern”的字符替换为“replacement”
2)pattern和replacement中使用%作为模式字符,匹配多个字符。
3)存在多个%时,第一个%作为模式字符,其余作为普通字符
示例:gmake
结果:a.o b.c.o
SRC = a.c b.c.c
OBJ = $(patsubst .c,.o,$(SRC))
Default:
@echo $(OBJ)
函数:无
模板:$(var:pattern=replacement)
功能:将字串“ text”中符合模式“pattern”的字符替换为“replacement”
示例:gmake
结果:a.o b.c.o
SRC = a.c b.c.c
OBJ = $(SRC:.c=.o)
Default:
@echo $(OBJ)
3、前缀后缀函数addsuffix、addprefix
函数:addprefix
模板:$(addprefix prefix,names…)
功能:为names列表各元素添加前缀prefix
示例:gmake
结果:../include/a.h ../include/b.h
SRC = a.h b.h
INLCUDE = $(addprefix ../include/,$(SRC))
Default:
@echo $(INCLUDE)
函数:addsuffix
模板:$(addsuffix suffix,names…)
功能:为names列表各元素添加后缀
示例:gmake
结果:a.c.ln
SRC = a.c
OBJ = $(addsuffix .ln,$(SRC))
Default:
@echo $(OBJ)
4、文件匹配函数wildcard
函数:wildcard
模板:$(wildcard pattern…)
功能:列出当前目录下所有符合模式的 pattern格式的文件名
结果:输出当前目录所有.c和.h文件
SRC := $(wildcard *.c *.h)
Default:
@echo $(SRC)
5、条件匹配函数if
函数:if
模板:$(if condition,then-part,else-part)
功能:if条件判断,true执行then-part,false执行else-part。
注意:虽然与ifeq功能一致,但ifeq属于Makefile关键字,不是函数。
结果:输出当前目录所有.h文件;若不存在,输出上一级目录所有.h文件
SRC := $(if $(wildcard .h),$1,../$1)
Default:
@echo $(SRC)
6、函数调用call
函数:call
模板:$(call expression,parm1,parm2,parm3…)
功能:将parm1等作为参数,调用expression,获取返回值。
结果:==== a.c ====
SRC = a.c
log = "====" $1 "===="
Default:
@echo $(call log,$(SRC))
7、控制函数error和warning
函数:error
模板:$(error text …)
功能:输出错误信息, 停止Makefile的运行。
结果:Makefile:2: *** this is error!. 中止.
Default:
$(error this is error!)
@echo "end"
函数:warning
模板:$(warning text …)
功能:输出警告信息, Makefile继续运行。
结果:Makefile:2: *** this is warning. end.
Default:
$(warning this is warning!)
@echo "end"
8、循环控制函数foreach
函数:foreach
模板:$(foreach var,list,command)
功能:循环对list元素进行command操作
结果:a a.o b b.o c c.o d d.o
SRC = a b c d
Default:
@echo $(foreach d,$(SRC),$d $d.o)