將空白分隔的文件名列表中的擴展名替換是常見要求,並且有內置功能。如果你想在每一個名字的結尾在列表中添加x
:
FILES_OUT = $(FILES_IN:=x)
的一般形式是$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
。這取值爲VARIABLE
,並在以此後綴結尾的每個單詞末尾替換OLD_SUFFIX
NEW_SUFFIX
(不匹配的單詞保持不變)。 GNU調用這個特性(它存在於每個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))'如果規則真的可以做成通用的。 – tripleee
@Gilles謝謝你這個有用的答案! – TheFrancisOne
這個操作符的名字是什麼?我想查看手冊,但找不到合適的名稱。 – rkioji