2012-12-03 45 views

回答

1

原始通配符处理是Make的明显缺点之一。这里是一个方式做你想要什么,但它是不完全优雅:

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

$(eval $(call pngrule,300)) 

$(eval $(call pngrule,600)) 

注意在命令中[email protected]$$<,并在call声明缺乏的空白。

如果你有很多这样的宽度,它可能是值得的去除多一点冗余:虽然缺点不打扰我

WIDTHS := 300 600 

$(foreach width,$(WIDTHS),$(eval $(call pngrule,$(width)))) 
+0

,这并不全是坏事在这种情况下。我不完全介意有一个容易实施的有限的可接受宽度集。 – altendky

+0

@altendky:如果通配符处理稍微好一点,那么可以在没有太多管道的情况下拥有一组有限的可接受宽度。等同于“如何在模式规则中使用多个通配符?”的问题?出现*很多*,答案总是笨拙。 – Beta