Makefile 笔记(使用函数)

为了熟悉Makefile方便,使用函数来简化脚本
Makefile的函数不多,需要经常使用才能得心应手。

patsubst

$(patsubst <pattern>,<replacement>,<text>)

查找<text> 中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式 <pattern>
返回被替换后的字符串

pattern:可以包含通配符%,表示任意长度的字符串。也可以是subst的<from>

$(objects:.o=.c)$(patsubst %.o,%.c,$(objects)) 是一样的

strip

$(strip <string>) 

去掉string开头和结尾的空字符

findstring

$(findstring <find>,<in>)

如果找到,那么返回 <find> ,否则返回空字符串
在字串 <in> 中查找<find> 字串

filter

$(filter <pattern...>,<text>)

以 <pattern> 模式过滤 <text> 字符串中的单词,保留符合模式 <pattern> 的单词。可以 有多个模式。 返回符合模式 <pattern> 的字串。
filter-out 功能与filter相反

sort

$(sort <list>)

给字符串 <list> 中的单词排序(升序)。
返回排序后的字符串,sort 函数会去掉 <list> 中相同的单词。

word

$(word <n>,<text>)

取字符串 <text> 中第 <n> 个单词。(从一开始)
返回字符串 <text> 中第 <n> 个单词。如果 <n> 比 <text> 中的单词数要大,那么返回空字符串。

wordlist

$(wordlist ,, )
从字符串 <text> 中取从 <ss> 开始到 <e> 的单词串。<ss> 和 <e> 是一个数字

words

$(words )
统计 <text> 中字符串中的单词个数。 如果我们要取 <text> 中最后的一个单词,我们可以这样:

$(word $(words <text>),<text>)

firstword

$(firstword <text>)

取字符串 <text> 中的第一个单词。

文件名操作函数

dir

$(dir <names...>)

从文件名序列 <names> 中取出目录部分。目录部分是指最后一个反斜杠(/ )之前的部分。 如果没有反斜杠,那么返回 ./

notdir

$(notdir <names...>)

从文件名序列 <names> 中取出非目录部分。非目录部分是指最后一个反斜杠(/ )之后的部分。

Suffix

$(suffix <names...>) 

从文件名序列 <names> 中取出各个文件名的后缀

basename

$(basename <names...>)

从文件名序列 <names> 中取出各个文件名的前缀部分。

addsuffix

$(addsuffix <suffix>,<names...>)

加后缀,把后缀 <suffix> 加到 中的每个单词后面。

addprefix

$(addprefix ,<names…>)
把前缀 <prefix> 加到 <names> 中的每个单词前面。

join

$(join <list1>,<list2>)

连接list1 和list2

$(join aaa bbb , 111 222 333) 

返回值是 aaa111 bbb222 333

foreach 函数

$(foreach <var>,<list>,<text>)

把参数 <list> 中的单词逐一取出放到参数 <var> 所指定的变量中,然后再执行 <text> 所包含的表达式。每一次 <text> 会返回一个字符串,循环过程中,<text> 的所返回的每个字符串会以空格分隔,最后当整个循环结束时,<text> 所返回的每个字符串所组成的整个字符串(以空格分隔)将会是 foreach 函数的返回值. var是一个临时变量,作用域只在 foreach 函数

<var> 最好是一个变量名,<list> 可以是一个表达式,而 <text> 中一般会使用 <var> 这个 参数来依次枚举 <list> 中的单词

if 函数

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

即 if 函数的参数可以是两个,也可以是三个。<condition> 参数是 if 的表达式,如果其返回的为非空字符串,那么这个表达式就相当于返回真,于是,<then-part> 会被计算,否则 <else-part> 会被计算。

shell 函数

操作系统 Shell 的命令
shell 函数把执行操作系统命令后的输出作为函数返回

控制 make 的函数

$(error <text ...>) 
$(warning <text ...>) 

很像 error 函数,只是它并不会让 make 退出,只是输出一段警告信息,而 make 继续执行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值