GNU makefile)では、ファイルリスト入力を使用して、新しい拡張子でファイルリスト出力を作成することが可能かどうか疑問に思っています。
入力では、私はこのリストを取得します:
FILES_IN=file1.doc file2.xls
そして、FILES_IN変数からメイクファイルにこの変数を構築したいと思います:
FILES_OUT=file1.docx file2.xlsx
出来ますか ?どうやって ?
ファイルリストを解析し、各拡張子(.doc、.xls)を検出して正しい拡張子に置き換える必要があるため、非常に困難です。
空白で区切られたファイル名のリストで拡張子を置き換えることは一般的な要件であり、これには組み込みの機能があります。リスト内のすべての名前の最後にx
を追加する場合:
_FILES_OUT = $(FILES_IN:=x)
_
一般的な形式は$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
です。これはVARIABLE
の値を取り、この接尾辞で終わる各Wordの末尾の_OLD_SUFFIX
_を_NEW_SUFFIX
_に置き換えます(一致しない単語は変更されません)。 GNU makeは、この機能を呼び出します(すべてのmake実装に存在します) 置換参照 。
この機能を使用して_.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)))
_