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