空白で区切られたファイル名のリストで拡張子を置き換えることは一般的な要件であり、これには組み込みの機能があります。x
リスト内のすべての名前の最後にを追加する場合:
FILES_OUT = $(FILES_IN:=x)
一般的な形式は$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
. これは の値を取り、この接尾辞で終わる各単語の末尾を by にVARIABLE
置き換えます(一致しない単語は変更されません)。GNU make は、この機能 (すべての make 実装に存在する)置換参照を呼び出します。OLD_SUFFIX
NEW_SUFFIX
.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)))