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 的明显缺点之一。这是一种做你想做的事的方法,但它并不完全优雅:

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 回答