Makefile常用函数

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值