gnu make项目管理(4)函数

make函数可以分成如下几类

  • 字符串操作
  • 文件名操作
  • 流程控制
  • 若干重要的杂项函数
  • 较不重要的杂项函数
  • 用户自定义函数

所有函数都具有如下形式

$(function-name arg1[,argn])

function-name是函数名,接着是函数的参数,以逗号为分隔符,第一个参数的前导空格会被删除,但是后续的任何参数包括前导空格都会被保留下来。

字符串函数

filter

$(filter pattern ...,text)

在这里插入图片描述
可以看到
1.第一个模式只会匹配单词he
2.模式中只能包含一个%字符,如果还有额外的%,那么额外的%都被视作文字字符
3.filter无法匹配子字符串且只能接受一个通配符

filter-out

$(filter-out pattern ...,text)

与filter结果相反

subst

$(subst search-string,replace-string,text)

这是一个不具备通配符能力的搜索替换函数,例如
在这里插入图片描述
patsubst

$(patsubst search-string,replace-string,text)

这是一个具备通配符能力的搜索替换函数,注意这里只能包含一个通配符,例如下面是删除text结尾处的斜线
在这里插入图片描述

words

$(words text)

返回text中单词数量,如
在这里插入图片描述
word

$(word n,text)

返回text中第n个单词,第一个单词编号是1
firstword

$(firstword text)

等同于$(word 1,text),如
在这里插入图片描述
wordlist

$(wordlist start,end,text)

在这里插入图片描述

重要杂项函数

sort

$(sort list)

对list进行排序并删除重复的项目
在这里插入图片描述
shell

$(shell command)

command被丢给subshell执行,make把执行结果当做函数返回值,结果中出现的换行符会被缩成单一空格,标准错误和任何程序状态不会被返回
在这里插入图片描述

下面可以测试word-list变量是否包含重复内容
在这里插入图片描述

文件名函数

wildcard

$(wildcard pattern...)

下面sources就保存了是.c和.h文件名列表,如果没有从.c、.h则返回空
在这里插入图片描述
dir

$(dir list...)

在这里插入图片描述
notdir

$(notdir name...)

在这里插入图片描述
suffix

$(suffix name...)

在这里插入图片描述
basename

$(basename name...)

在这里插入图片描述
addsuffix

$(addsuffix suffix,name...)

给name添加suffix后缀
在这里插入图片描述

addprefix

$(addprefix prefix,name...)

给name添加prefix前缀
在这里插入图片描述
join

$(join prefix-list,suffix-lis)

在这里插入图片描述

流程控制

if

$(if condition,then-part,else-part)

if函数(注意不要和条件指令ifeq、ifne、ifdef、ifndef搞混了),如果condition扩展之后包涵任何字符(空格也算),则为真,会对then-part进行扩展动作,否则condition为假,对else-part进行扩展。
如想要判断makefile是否在windows上运行,查看COMSPEC,只有windows会定义次变量
在这里插入图片描述
要求make版本要在3.80之后
在这里插入图片描述
error

$(error text)

输出“无法挽回的”错误信息,上面if函数检查MAKE_VERSION版本例子中,如果condition为假,则error会当当前make停止执行并输出后面错误信息
**foreach **

$(foreach variable,list,body)

让variable依次等于list列表中的值,让后variable代入body展开作为返回值
在这里插入图片描述
下面这个例子可用来判断测试一组变量是否定义过
在这里插入图片描述
在这里插入图片描述
如果把strerr去掉
在这里插入图片描述
在这里插入图片描述

较不重要的杂项函数

strip

$(strip text)

去掉text前后导空格

**origin **

$(origin variable)

返回描述变量来自何处的字符串,
在这里插入图片描述
在这里插入图片描述
**warning **

$(warning text)

类似于error函数,但是不会导致make结束运行

自定义函数

下面是一个简单的调试跟踪函数来打印函数调用情况和入口参数,$0用来表示访问当前所执行的函数名称
在这里插入图片描述
foreach的body加上了'',所以foreach返回结果是每个参数带上单引号的以空格为分隔符的列表串,再用subst把参数之间的单引号空格单引号替换成单引号$(coma)单引号,上面这个追踪最多只能列出9个参数,因为foreach的list是1~9
在这里插入图片描述

eval

eval函数是将文本直接放入make解析,下面我是参考下面2篇文章
https://blog.csdn.net/xiaoyink/article/details/89671428
https://blog.csdn.net/k7arm/article/details/67637340
https://www.cnblogs.com/merlindu/p/6542805.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值