1

GNU makeを使用してバッチファイル処理を自動化したいのですが、私の特定のケースでは、膨大な数の画像ファイルがあり、それらを色空間変換してカスタムファイル形式に再エンコードしたいと思います。ファイル形式エンコーダーは、コマンドラインでファイル名のみを受け入れます。つまり、stdioリダイレクトは受け入れません。

私のファイルとディレクトリの構造は

./sourceimages/*.tif
./destimages/*.mie
./Makefile

パターンルールを使ってペリミナリーMakefileを作成しました

%.mie : %.tif
    tmpraw := $(shell mktemp --suffix=raw)
    convert $< -colorspace YUV -resize …x… rgb:$(tmpraw)
    miecoder $(tmpraw) $@
    rm $(tmpraw)

しかし、の暗黙のターゲットの前提条件としてすべてのファイルを取り込むようにする方法がわからないため、今は行き詰まっています。では、どうすればこれを行うことができますか?sourceimagesdestimages

makeを使用して、並列実行の機能を利用したいと思います。

4

1 に答える 1

1

まず、を使用mktempして一意の一時ファイル名を作成する必要がなく、他の問題が発生します。に変換foo.tifする場合はfoo.mie、一時ファイルを呼び出してみましょうfoo_temp.tif

%.mie : %.tif
    convert $< -colorspace YUV -resize …x… rgb:$*_temp.tif
    miecoder $*_temp.tif $@
    rm $*_temp.tif

次に、Makeが別の前提条件を使用して1つの場所にターゲットを構築できるように、パスを配置します。

destimages/%.mie : sourceimages/%.tif
    convert $< -colorspace YUV -resize …x… rgb:$*_temp.tif
    miecoder $*_temp.tif $@
    rm $*_temp.tif

最後に、ソースを探し、目的のターゲットのリストを推測し、それらをデフォルトのタゲットの前提条件にします(これらすべてをdestimages/%.mie:...makefileのルールの上に置きます)。

SOURCES := $(wildcard sourceimages/%.tif)
TARGETS = $(patsubst sourceimages/%.tif, destimages/%.mie, $(SOURCES))

.PHONY: all
all: $(TARGETS)
于 2013-02-01T21:32:25.127 に答える