Makefile 文件名处理函数(上)

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

dir函数:取路径名的目录

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

$(dir NAMES…)

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

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

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

# make
LIST = /home/wit/banana.c /usr/include/stdio.h
dir = /home/wit/ /usr/include/

notdir函数:取文件名

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

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

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

# make
LIST = /home/wit/banana.c /usr/include/stdio.h
file = banana.c stdio.h

suffix函数:取文件名后缀

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

$(suffix NAMES…)

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

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

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

# make
LIST = /home/wit/banana.c /usr/include/stdio.h
suffix = .c .h

basename函数:取文件名前缀

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

$(basename NAMES…)

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

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

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

# make
LIST = /home/wit/banana.c /usr/include/vmlinux.lds.S
《Makefile工程实践》视频教程,一线开发工程师独家录制,网上首家讲解Makefile的实战课程。从零开始,教你一步一步编写一个工程项目的Makefile,支持使用第三方静态库、动态库,支持指定模块或目录编译生成静态库、动态库,赠送企业级的Makefile模板,学完即可拿来使用,投入项目开发实战,具备独立开展项目开发和管理的能力。详情请点击淘宝链接:Linux三剑客