欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Linux Makefile文件名处理函数知识详解

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

2024/10/24 20:24:10 来源:https://blog.csdn.net/qq_45398836/article/details/142068110  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com