介绍几个常用的makefile函数
- addprefix.
$(addprefix <prefix>, <name1 name2 ...>)
功能:把<prefix>加到name序列中的每一个元素前面。
result = $(addprefix %., c cpp) test: @echo $(result)
输出:%.c %.cpp
- addsuffix 用法与addprefix相同,只是一个是前缀,一个是后缀。
- if.
$(if <condition>, <then-part>,<else-part>)
功能:<condition>参数是 if的表达式,如果其返回的为非空字符串,那么这个表达式就相当于返回真,于是,<then-part>会被计算,返回计算结果字符串;否则<else- part>会被计算,返回计算结果字符串。<else-part>可以省略。
suffix := result1 := $(if $(suffix), $(addprefix %.,$(suffix)), %) suffix := c cpp result2 := $(if $(suffix), $(addprefix %.,$(suffix)), %) test: @echo result1 is $(result1) @echo result2 is $(result2)
输出:
result1 is % result2 is %.c %.cpp
- wildcard.
$(wildcard <pattern1 pattern2 ...>)
功能:展开pattern中的通配符
$(wildcard src/*)
输出:得到src目录下的文件列表
- filter.
$(filter <pattern1 pattern2 ...>, <text>)
功能:以<pattern>模式过滤<text>字符串中的单词,保留符合模式<pattern>的单词。可以有多个模式。
$(filter %.c %.cpp, $(wildcard src/*))
输出:src目录下所有后缀是.c和.cpp的文件序列。
- call.
$(call <expression>,<param1>,<param2>,...)
功能:<expression>中有$(1),$(2)这种占位符,call函数使用<param1>,<param2>来替换$(1),$(2),并计算表达式的值,返回结果字符串。
listfile = $(filter $(if $(2),$(addprefix %.,$(2)),%), \ $(wildcard $(addsuffix $(SLASH)*, $(1)))) list_cc = $(call listfile, src, c cpp)
输出:src目录下所有后缀是.c和.cpp的文件序列