在以空格分隔的文件名列表中替换扩展名是一项常见要求,并且为此提供了内置功能。如果要在列表中每个名称的末尾添加 x
:
FILES_OUT = $(FILES_IN:=x)
一般形式是$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
。这采用 VARIABLE
的值并将每个以该后缀结尾的词的末尾的 OLD_SUFFIX
替换为 NEW_SUFFIX
(不匹配的词保持不变)。 GNU make 调用此功能(存在于每个 make 实现中)substitution references。
如果您只想使用此功能将 .doc
更改为 .docx
并将 .xls
更改为 .xlsx
,则需要使用中间变量。
FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)
您还可以使用稍微更通用的语法 $(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX)
。此功能不是 GNU make 独有的,但它不像普通的后缀更改替换那样可移植。
还有一个 GNU make 功能可以让您在同一行上链接多个替换:patsubst
function。
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))
FILES_OUT := $(patsubst %,%x,$(FILES_IN))
。$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
的 GNU make 手册的链接,您还指的是什么?