MakeFile内嵌文件名处理函数

本文介绍了Makefile中常用的文件名操作函数,如dir、notdir、suffix等,通过实例展示了如何利用这些函数来处理文件路径及文件名,适用于Makefile编写及自动化构建流程优化。

dir函数

函数名称取目录函数—dir
函数语法 $(dir NAMES…)
函数功能从文件名序列“NAMES…”中取出各个文件名的目录部分。文件名的目
录部分就是包含在文件名中的最后一个斜线(“/”)(包括斜线)之前的部分
返回值空格分割的文件名序列“NAMES…”中每一个文件的目录部分
函数说明如果文件名中没有斜线,认为此文件为当前目录(“./”)下的文件
示例$(dir  src/foo.c  hacks)
返回值为“src/ ./”

notdir函数

函数名称取文件名函数——notdir
函数语法$(notdir NAMES…)
函数功能从文件名序列“NAMES…”中取出非目录部分。目录部分是指最后一个
斜线(“/”)(包括斜线)之前的部分。删除所有文件名中的目录部分,
只保留非目录部分。
返回值文件名序列“NAMES…”中每一个文件的非目录部分
函数说明如果“NAMES…”中存在不包含斜线的文件名,则不改变这个文件名。
以反斜线结尾的文件名,是用空串代替,因此当“NAMES…”中存在多
个这样的文件名时,返回结果中分割各个文件名的空格数目将不确定!
这是 此函数的一个缺陷
示例$(notdir src/foo.c hacks)
返回值为:“foo.c hacks”

suffix函数

函数名称取后缀函数—suffix。
函数语法$(suffix NAMES…)
函数功能从文件名序列“NAMES…”中取出各个文件名的后缀。后缀是文件名中最后一个以点“.”开始的(包含点号)部分,如果文件名中不包含一个点号,则为空。
返回值以空格分割的文件名序列“NAMES…”中每一个文件的后缀序列
函数说明“NAMES…”是多个文件名时,返回值是多个以空格分割的单词序列。如果文件名没有后缀部分,则返回空
示例$(suffix src/foo.c src-1.0/bar.c hacks)
返回值为“.c .c”。

basename函数

函数名称取前缀函数—basename。
函数语法$(basename NAMES…)
函数功能从文件名序列“NAMES…”中取出各个文件名的前缀部分(点号之后的
部分)。前缀部分指的是文件名中最后一个点号之前的部分
返回值空格分割的文件名序列“NAMES…”中各个文件的前缀序列。如果文件没有前缀,则返回空字串。
函数说明如果“NAMES…”中包含没有后缀的文件名,此文件名不改变。如果一
个文件名中存在多个点号,则返回值为此文件名的最后一个点号之前的文件名部分。
示例

$(basename src/foo.c src-1.0/bar.c /home/jack/.font.cache-1 hacks)

返回值为:“src/foo src-1.0/bar /home/jack/.font hacks”

addsuffix函数

函数名称加后缀函数—addsuffix。
函数语法$(addsuffix SUFFIX,NAMES…)
函数功能为“NAMES…”中的每一个文件名添加后缀“SUFFIX”。参数“NAMES…”为空格分割的文件名序列,将“SUFFIX”追加到此序列的每一个文件名的末尾。
返回值以单空格分割的添加了后缀“SUFFIX”的文件名序列
示例

$(addsuffix .c,foo bar)

返回值为“foo.c bar.c”。

addprefix函数

函数名称加前缀函数—addprefix
函数语法 $(addprefix PREFIX,NAMES…)
函数功能为“NAMES…”中的每一个文件名添加前缀“PREFIX”。参数“NAMES…”是空格分割的文件名序列,将“SUFFIX”添加到此序列的每一个文件名之前
返回值以单空格分割的添加了前缀“PREFIX”的文件名序列。
示例$(addprefix src/,foo bar)
返回值为“src/foo src/bar”。

join函数

函数名称单词连接函数——join
函数语法$(join LIST1,LIST2)
函数功能将字串“LIST1”和字串“LIST2”各单词进行对应连接。就是将“LIST2”中的第一个单词追加“LIST1”第一个单词字后合并为一个单词;将“LIST2”中的第二个单词追加到“LIST1”的第一个单词之后并合并为一个单词,……依次列推
返回值单空格分割的合并后的字(文件名)序列。
函数说明如果“LIST1”和“LIST2”中的字数目不一致时,两者中多余部分将被作为返回序列的一部分
示例

$(join a b , .c .o)

返回值为:“a.c b.o”。

$(join a  b  c , .c .o)
返回值为:“a.c  b.o  c”。

wildcard函数

函数名称获取匹配模式文件名函数—wildcard
函数语法$(wildcard PATTERN)
函数功能列出当前目录下所有符合模式“PATTERN”格式的文件名。
返回值空格分割的、存在当前目录下的所有符合模式“PATTERN”的文件名。
函数说明“PATTERN”使用shell可识别的通配符,包括“?”(单字符)、“*”(多字符)等。
示例$(wildcard *.c)
返回值为当前目录下所有.c 源文件列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bourne76

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值