2010-06-17 26 views
2

我不能想出一個辦法來定義下列類型的生產與化妝的通用模式規則:Makefile的通用模式規則 - XYZZY-en_US.ext2從xyzzy.ext0

通過要求xyzzy-en_US.ext2xyzzy.ext0xyzzy.ext1

這工作:

all: xyzzy-en_US.ext2 
# to be compiled from xyzzy.ext0 

%.ext1 : %.ext0 
    # produce xyzzy.ext1 

%-en_US.ext2 : %.ext1 
    # produce xyzzy-en_US.ext2 

但如何推廣第二個規則的語言環境的一部分?還是我需要爲所有不同的語言環境生成規則?

無論這些工作:

%-??_??.ext2 : %.ext1 
    # ... 

%.ext2 : $(@,%-??_??.ext2,%.ext1) 
    # ... 

回答

4

沒有與製作來完成(正則表達式處理是高我的心願)沒有什麼好辦法,但這裏是一個雜牌。

你可以有一個單獨的規則,適用於任何「東西」(xyzzy或其他)的任何語言環境。但是由於事先並不知道需要什麼語言環境,但是您確實知道存在什麼ext0文件,所以對每個「事物」制定規則可能會更好:

THINGS = $(basename $(wildcard *.ext0)) # xyzzy qrssr... 

define TEMPLATE 
$(1)-%.ext2: $(1).ext1 
    @echo produce [email protected] from $$^ using $$* 
endef 

$(foreach thing,$(THINGS),$(eval $(call TEMPLATE,$(thing))))