makefile 常用函数
call
可以创建定制化参数函数的引用函数
支持对自定义函数的引用
支持将一个变量定义为一个复杂的表达式,用call函数根据不同的参数对他进行展开来获取不同的结果
原型
$(call VARIABLE,PARAM,PARAM,…)
执行时,将PARAM依次赋值给$(1) $(2) $(3),最后对VARIABLE展开后的表达式进行处理
返回值:VARIABLE展开后的表达式的值
使用
pointer := pointed_value
source_dir=./
source_file:= $(wildcard *.c)
funcalll=$(source_dir)$1
a=$(call funcalll,a.c)
all:target wild
wild:$(wildcard $(source_dir)/*.c)
@echo $a
filter filter-out
filter:过滤函数
filter-out:反过滤函数
原型
$(filter PATTERN,PATTERN…,TEXT)
$(filter-out PATTERN PATTERN…,TEXT)
使用
objects=main.o foo.o main2.o
pattern=main.o foo.o
all:target
target:
@echo $(filter-out $(pattern),$(objects))
@echo start -------------------------
@echo end ----------------------------
addsuffix addprefix
添加尾缀
原型
$(addsuffix/addprefix suffix1 suffix2,name1 name2)
使用
# list all files in some directories: (#directories, #types)
listf = $(filter $(if $(2),$(addprefix %.,$(2)),%),\
$(wildcard $(addsuffix $(SLASH)*,$(1))))
wildcard
通配符函数,一般通配符会被自动展开,但是在变量的定义和函数引用时通配符将失效
这种情况可以使用函数"wildcard"
原型
$(wildcard *.c)
使用
pointer := pointed_value
source_dir=./
source_file:= $(wildcard *.c)
all:target wild
wild:$(wildcard $(source_dir)/*.c)
@echo $^
target:
@echo start -------------------------
@echo $(patsubst %.c,%.o,$(source_file))
@echo end ----------------------------
patsubst
字符处理,将文件列表模式进行替换
原型
$(patsubst 原模式, 目标模式, 文件列表)
使用
pointer := pointed_value
source_file:= $(wildcard *.c)
all:target
target:
@echo start -------------------------
@echo $(patsubst %.c,%.o,$(source_file))
@echo end ----------------------------
eval
将text内容展开做为makefile的一部分被makefile解析和执行
原型
$(eval text)
使用
$(eval test:test.c)
将会产生
cc test.c -o test
origin
测试变量来源
原型
$(origin var)
使用
按原型那么用