1
%.600x.png: %.svg
    inkscape --export-png=$@ --export-width=600 --export-area-drawing $<

%.300x.png: %.svg
    inkscape --export-png=$@ --export-width=300 --export-area-drawing $<

上記の Makefile に示されている繰り返しをどのように回避しますか? 私の主張を理解するために、いくつかの新しい構文を発明します。

%(1).%(2)x.png: %(1).svg
    inkscape --export-png=$@ --export-width=%(2) --export-area-drawing $<
4

1 に答える 1

1

プリミティブ ワイルドカードの処理は、Make の明らかな欠点の 1 つです。これはあなたが望むことをする方法ですが、それは正確にはエレガントではありません:

define pngrule
%.$(1)x.png: %.svg
    inkscape --export-png=$$@ --export-width=$(1) --export-area-drawing $$<
endef

$(eval $(call pngrule,300))

$(eval $(call pngrule,600))

$$@コマンドのandと、ステートメント$$<に空白がないことに注意してください。call

これらの幅がたくさんある場合は、もう少し余分なものを削除する価値があるかもしれません:

WIDTHS := 300 600

$(foreach width,$(WIDTHS),$(eval $(call pngrule,$(width))))
于 2012-12-04T14:28:46.750 に答える