文章目录
Makefile常用函数
1. foreach函数
-
此函数使用循环操作,是仿照Unix标准shell的for语句;
-
语法
$(foreach <var>,<list>,<text>)
-
流程
-
- 将参数列表的单词逐一取出
- 将取出的单词放到指定的变量之中
- 执行
所包含的表达式 - 执行第一步~第3步
- 循环结束,
返回的是每个字符串所组成的整个字符串(空格分隔)
-
-
举例
names := a b c d files := $(foreach n,$(names),$(n).o) #输出结果为 --> files的值为 "a.o b.o c.o d.o" #注意:n是一个局部变量,foreach函数执行结束,n将消失
-
2. filter函数
-
名称:过滤函数
-
语法
$(filter <pattern...>,<text>)
-
功能:以模式过滤
字符串中的单词,保留符合模式的单词。可以包含多个模式。 -
返回:符合模式的字符串
-
举例
sources := beep.c dealay.c beep.h start.s beep : $(sources) gcc -o $@ $(filter %.c %.s,$(sources)) # $(filter %.c %.s,$(sources))的返回值是"beep.c dealy.c start.s"
3. filter-out函数
-
名称:反过滤函数
-
语法
$(filter-out <pattern...>,<text>)
-
功能:以模式过滤
字符串中的单词, 去除符合模式的单词。可以包含多个模式。 -
返回:返回不符合模式的字符串
-
举例
objects := main.o start.s config.c system.o main := main.o system.o files := $(filter-out $(main),$(objects)) # $(filter-out $(main),$(objects))的返回值为“start.s config.c system.o”
4. Wildcard函数
-
名称:扩展通配符
-
语法
$(wildcard pattern...)
-
功能:以pattern的格式,寻找真实存在的文件
-
返回:返回存在文件的名字
-
举例
# 创建三个文件 a.c b.c c.c files := $(wildcard *.c) all: @echo files = $(files) # 结果:files = a.c b.c c.c
5. patsubst函数
-
名称:模式字符串替换函数
-
语法
$(patsubst <pattern>,<replacement>,<text>)
-
功能:查找
中的单词是否符合模式,如果匹配的话,以的格式进行替换 -
返回:函数返回被替换过后的字符串
-
举例
files := a.c b.c c.c d.c abc sub_files := $(patsubst %.c,%.d,$(files)) all: @echo sub_files = $(sub_files) # 结果 sub_files = a.d b.d c.d .d.d abc
6. notdir函数
-
名称:取文件函数
-
语法
$(notdir <names...>)
-
功能:从文件名序列中取出非目录部分的文件。–>也就是路径名中不包含“/”
-
返回:返回文件序列的非目录部分。
-
举例
$(notdir src/foo.c dealy.c) #返回值为“foo.c dealy.c ”
7. addsuffix函数
-
名称:加后缀函数
-
语法
$(addsuffix <suffix>,<names...>)
-
功能:把后缀加到中的每个单词后面
-
返回:返回添加过后缀的文件名序列
-
举例
$(addsuffix .c,foo bar) # 返回值为“foo.c bar.c"