空白で区切られたファイル名のリストで拡張子を置き換えることは一般的な要件であり、これには組み込みの機能があります。x
リスト内のすべての名前の最後にを追加する場合:
FILES_OUT = $(FILES_IN:=x)
一般的な形式は$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
です。これはの値を取り、この接尾辞で終わる各単語の終わりでで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)
。この機能はGNUmakeに固有のものではありませんが、単純な接尾辞を変更する置換ほど移植性はありません。
同じ行に複数の置換を連鎖させることができるGNUmake機能もあります:patsubst
関数。
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))
FILES_OUT := $(patsubst %,%x,$(FILES_IN))
、ルールを実際にその一般的なものにすることができる場合。