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三剑客