Linux Makefile文件名处理函数知识详解

GNU make提供了一系列对文件名进行各种操作的函数:文件名替换、加前缀、去目录等。

1.1dir函数:取路径名的目录

dir函数用来从一个路径名中截取目录的部分。

$(dir NAMES…)

dir函数会从NAMES文件名序列中,取出各个文件路径名中的目录部分并返回

.PHONY: allLIST = /home/wit/banana.c /usr/include/stdio.hall:    @echo "LIST = $(LIST)"    @echo "dir = $(dir $(LIST))"

执行make命令,运行结果为:

# makeLIST = /home/wit/banana.c /usr/include/stdio.hdir = /home/wit/ /usr/include/

1.2notdir函数:取文件名

notdir函数和dir函数实现完全相反的功能:从一个文件路径名中去文件名,而不是目录。notdir函数的使用方法和dir函数相同。

.PHONY: allLIST = /home/wit/banana.c /usr/include/stdio.hall:    @echo "LIST = $(LIST)"    @echo "file = $(notdir $(LIST))"

执行make命令,运行结果为:

# makeLIST = /home/wit/banana.c /usr/include/stdio.hfile = banana.c stdio.h

1.3suffix函数:取文件名后缀

suffix函数从一系列文件名序列中,取出各个文件名的后缀。

$(suffix NAMES…)

文件名的后缀是文件名中以点号 . 开始(包括点号)的部分。若文件名没有后缀, suffix函数则返回空。

.PHONY: allLIST = /home/wit/banana.c /usr/include/stdio.hall:    @echo "LIST = $(LIST)"    @echo "suffix = $(suffix $(LIST))"

执行make命令,运行结果为:

# makeLIST = /home/wit/banana.c /usr/include/stdio.hsuffix = .c .h

1.4basename函数:取文件名前缀

basename函数从一系列文件名序列中,取出各个文件名的前缀部分:

$(basename NAMES…)

如果一个文件名中包括多个点号,basename函数返回最后一个点号之前的文件名部分;如果一个文件名没有前缀,函数返回空字符串。

.PHONY: allLIST = /home/wit/banana.c /usr/include/vmlinux.lds.Sall:    @echo "LIST = $(LIST)"    @echo "basename = $(basename $(LIST))"

执行make命令,运行结果为:

# makeLIST = /home/wit/banana.c /usr/include/vmlinux.lds.S

1.5addsuffix函数:给文件名加后缀

addsuffix函数的作用是:给文件列表中的每个文件名添加后缀SUFFIX

 $(addsuffix SUFFIX, NAMES…)

使用示例:

.PHONY: allLIST = apple banana peachall:    @echo "LIST = $(LIST)"    @echo "addsuffix = $(addsuffix .c, $(LIST))"

运行结果:

# makeLIST = apple banana peachaddsuffix = apple.c banana.c peach.c

1.6addprefix函数:给文件名加前缀

addprefix函数的作用是:给文件列表中的每个文件名添加一个前缀PREFIX

$(addprefix PREFIX, NAMES…)

使用示例:

.PHONY: allLIST = apple.c banana.c peach.call:    @echo "LIST = $(LIST)"    @echo "addsuffix = $(addprefix /home/wit/, $(LIST))"

执行make命令,运行结果:

 makeLIST = apple.c banana.c peach.caddsuffix = /home/wit/apple.c /home/wit/banana.c /home/wit/peach.c

1.7join函数:单词连接

join函数的作用是:将字符串LIST1和字符串LIST2的各个单词依次连接,合并为新的单词构成的字符串

$(join LIST1,LIST2)

使用示例:

.PHONY: allLIST1 = apple banana peachLIST2 = .c .h .sLIST  = $(join $(LIST1), $(LIST2))all:    @echo "LIST1 = $(LIST1)"    @echo "LIST2 = $(LIST2)"    @echo "LIST = $(LIST)"

运行结果:

# makeLIST1 = apple banana peachLIST2 = .c .h .sLIST = apple.c banana.h peach.s

如果两个字符串中的单词个数不相等,则只合并前面的单词,剩下的单词不合并。如下面的Makefi:

.PHONY: allLIST1 = apple banana peachLIST2 = .c .hLIST  = $(join $(LIST1), $(LIST2))all:    @echo "LIST1 = $(LIST1)"    @echo "LIST2 = $(LIST2)"    @echo "LIST = $(LIST)"

运行结果:

# makeLIST1 = apple banana peachLIST2 = .c .hLIST = apple.c banana.h peach

因为LIST2中只有2个单词,所以我们可以看到最后一个单词peach没有参与合并,但仍作为一个新的单词合并到LIST变量中。

1.8wildcard函数:列出所有符号匹配模式的文件

wildcard函数的作用是:列出当前目录下所有符合PATTREN模式的文件名

$(wildcard PATTERN)

其中PATTREN可以使用shell能识别的通配符:?、*等。

使用示例:列出当前目录下的所有C文件

.PHONY: allLIST  = $(wildcard *.c)all:    @echo "LIST = $(LIST)"

执行make命令,运行结果为:

# lsadd.c  add.h  hello.c  main.c  makefile  sub.c  sub.h# makeLIST = hello.c main.c add.c sub.c

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dola_Pan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值