php的makefilename,Makefile常用文件名操作函数

我们在编写 Makefile 的时候,很多情况下需要对文件名进行操作。例如这些情况:有的需要获取文件的路径,有的需要去除路径,还有的需要取出前缀或后缀等等。当遇到这样的问题的时手动需修改是不太可能的,因为文件可能会很多,而且 Makefile 中操作文件名可能不止一次。所以 Makefile 给我们提供了相应的函数去实现文件名的操作。

注意:下面的每个函数的参数字符串都会被当作或是一个系列的文件名来看待。

$(dir )

函数说明如下:

函数名称:取目录函数。

函数的功能:是从文件名序列中取出目录部分,如果没有中没有 "/" ,取出的值为 "./" 。

返回值:目录部分是指最后一个反斜杠之前的部分。如果没有反斜杠将返回“./”。

实例:

OBJ=$(dir src/foo.c hacks) all: @echo $(OBJ)

执行make命令,我们可以得到的值是“src/ ./”。提取文件 foo.c 的路径是 "/src" 和文件 hacks 的路径 "./"。

$(notdir )

函数说明如下:

函数名称:取文件函数。

函数的功能:从文件名序列中取出非目录的部分。非目录的部分是最后一个反斜杠之后的部分。

返回值:文件非目录的部分。

实例:

OBJ=$(notdir src/foo.c hacks) all: @echo $(OBJ)

执行 make 命令,我们可以得到的值是“foo.c hacks”。

$(suffix )

函数说明如下:

函数名称:取后缀名函数。

函数的功能:从文件名序列中中取出各个文件的后缀名。

返回值:文件名序列中的后缀序列,如果文件没有后缀名,则返回空字符串。

实例

OBJ=$(suffix src/foo.c hacks) all: @echo $(OBJ)

执行 make 命令,我们得到的值是“.c ”。文件 "hacks" 没有后缀名,所以返回的是空值。

$(basename )

函数说明如下:

函数名称:取前缀函数。

函数的功能:是从文件名序列中取出各个文件名的前缀部分。

返回值:被取出来的文件的前缀名,如果文件没有前缀名则返回空的字符串。

实例:

OBJ=$(notdir src/foo.c hacks) all: @echo $(OBJ)

执行 make 命令,我们可以得到值是“src/foo hacks”。获取的是文件的前缀名,包含文件路径的部分。

$(addsuffix ,)

函数说明如下:

函数名称:添加后缀名函数。

函数的功能:把后缀加到中的每个单词后面。

返回值:添加上后缀的文件名序列。

实例:

OBJ=$(addsuffix .c,src/foo.c hacks) all: @echo $(OBJ)

执行 make 后我们可以得到“sec/foo.c.c hack.c”。我们可以看到如果文件名存在后缀名,依然会加上。

$(addperfix ,)

函数说明如下:

函数名称:添加前缀名函数。

函数的功能:把前缀加到中的每个单词的前面。

返回值:添加上前缀的文件名序列。

实例:

OBJ=$(addprefix src/, foo.c hacks) all: @echo $(OBJ)

执行 make 命令,我们可以得到值是 "src/foo.c src/hacks" 。我们可以使用这个函数给我们的文件添加路径。

$(join ,)

函数说明如下:

函数名称:链接函数。

函数功能:把中的单词对应的拼接到的后面。如果的单词要比的多,那么,中多出来的单词将保持原样,如果中的单词要比中的单词少,那么中多出来的单词将保持原样。

返回值:拼接好的字符串。

实例:

OBJ=$(join src car,abc zxc qwe) all: @echo $(OBJ)

执行 make 命令,我们可以得到的值是“srcabc carzxc qwe”。很显然中的文件名比的少,所以多出来的保持不变。

$(wildcard PATTERN)

函数说明如下:

函数名称:获取匹配模式文件名函数

函数的功能:列出当前目录下所有符合模式的PATTERN格式的文件名。

返回值:空格分隔的存在当前目录下的所有符合模式PATTERN的文件名。

实例:

OBJ=$(wildcard *.c *.h) all: @echo $(OBJ)

执行 make 命令,我们可以得到当前函数下所有的 ".c " 和  ".h"  结尾的文件。这个函数通常跟的通配符 "*" 连用,当被使用在依赖规则的描述的时候被展开(在这里我们的例子如果没有 wildcard 函数,我们的运行结果也是这样,"echo" 属于 shell 命令,在使用通配符的时通配符自动展开,我们这里只是相要说明一下这个函数在使用时,如果通过引用变量出现在规则中要被使用)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值