1、makefile中支持函数的概念
make解释器提供了一系列的函数供makefile调用,也可以定义自己的函数。这里只介绍make解释器已经提供的一些函数来介绍。
在makefile中函数的调用和变量的调用方法很像。函数的调用方法如下:
$(<function> <arguments>,<arguments>) 或者是 ${<function> <arguments>,<arguments>}
- function是函数名,arguments是函数的参数。 参数之间要用逗号分开。
- 可以使用小括弧,或者花括弧,一般选择小括弧。
2、模式字符串替换函数:patsubst
$(patsubst <pattern>,<repalcement>,<test>)
函数说明:查找 text 中的单词是否符合模式 pattern,如果匹配的话,则用 replacement 替换。返回值为替换后的新字符串。
实例:
SRC := source/
OBJ=$(patsubst %.c,%.o,$(SRC))
将source/目录下所有的.c文件名,替换为.o文件名。
3、foreach函数
$(foreach <var>,<list>,<text>)
函数说明:把参数 list 中的单词逐一取出放到参数 var 所指定的变量中,然后再执行 test 所包含的表达式。每一次会返回一个字符串,循环过程中,test 返回的每个字符串会以空格分割,最后当整个循环结束的时候,test 所返回的每个字符串所组成的整个字符串(以空格分隔)将会是 foreach 函数的返回值。所以 var 最好是一个变量名,list 可以是一个表达式,而 test 中一般会只用 var 这个参数来枚举 list 中的单词。
实例:
name:=a b c d
files:=$(foreach n,$(names),$(n).o)
all:
@echo $(files)
4、字符串替换函数:subst
$(subst <from>,<to>,<text>)
函数说明:把字符串中的 form 替换成 to,返回值为替换后的新字符串。
实例:
OBJ=$(subst ee,EE,feet on the street)
all:
@echo $(OBJ)
执行 make 命令,我们得到的值是“fEEt on the strEEt”。
5、过滤函数:filter
$(filter <pattern>,<text>)
函数说明:过滤出 text 中符合模式 pattern 的字符串,可以有多个 pattern 。返回值为过滤后的字符串。
实例:
OBJ=$(filter %.c %.o,1.c 2.o 3.s)
all:
@echo $(OBJ)
执行 make 命令,我们得到的值是“1.c 2.o”。
6、notdir 函数
$(notdir <names>)
函数说明:从文件名序列中 names 中取出各个文件的后缀名。返回值为文件名序列 names 中的后缀序列,如果文件没有后缀名,则返回空字符串。
实例:
OBJ=$(suffix src/foo.c hacks)
all:
@echo $(OBJ)
make 以后,得到的值是“.c ”。文件 “hacks” 没有后缀名,所以返回的是空值。
7、获取匹配模式文件名函数:wildcard
$(wildcard PATTERN)
函数说明:列出当前目录下所有符合模式的 PATTERN 格式的文件名。返回值为当前目录下的所有符合模式 PATTERN 的文件名,它们以空格分隔。
实例:
OBJ=$(wildcard *.c *.h)
all:
@echo $(OBJ)
执行make 命令,可以得到当前函数下所有的 ".c " 和 “.h” 结尾的文件。这个函数通常跟的通配符 “*” 连用,一般使用在依赖规则的描述中。
本文参考:https://blog.csdn.net/oqqHuTu12345678/article/details/125617988