如何在Makefile中提取文件列表中的文件名(不含路径与后缀)
Makefile提取纯文件名(不含路径与后缀)的实现方法
已知通过SOURCES = $(wildcard src/**/*.cpp)获取了带完整路径的.cpp源文件列表,要提取出仅包含文件名(去掉路径和.cpp后缀)的列表NAMES,可以通过Makefile内置函数组合实现:
方法一:使用notdir + basename
SOURCES = $(wildcard src/**/*.cpp) NAMES = $(basename $(notdir $(SOURCES)))
函数作用说明:
$(notdir $(SOURCES)):移除每个文件的路径部分,把src/dir_one/file_one.cpp这类带路径的文件名转换为file_one.cpp$(basename ...):移除文件名的后缀部分,把file_one.cpp转换为file_one
方法二:使用notdir + patsubst
也可以用模式替换函数patsubst替代basename,效果完全一致:
SOURCES = $(wildcard src/**/*.cpp) NAMES = $(patsubst %.cpp,%,$(notdir $(SOURCES)))
函数作用说明:
$(patsubst %.cpp,%,...):将所有以.cpp结尾的字符串,替换为去掉.cpp的部分,实现后缀移除的效果
验证结果
代入示例中的SOURCES列表,两种方法最终得到的NAMES值均为:
file_one file_two file_three file_four file_five
内容的提问来源于stack exchange,提问作者BENG
相关产品推荐
相关产品推荐

