2

make を使用して、次の種類のプロダクションのジェネリック パターン ルールを定義する方法がわかりません。

経由で必要xyzzy-en_US.ext2です。xyzzy.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

しかし、2 番目のルールのロケール部分を一般化するにはどうすればよいでしょうか。それとも、すべての異なるロケールに対してルールを生成する必要がありますか?

これらのどちらも機能しません:

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

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

1 に答える 1

4

Makeでこれを行う良い方法はありません(正規表現の処理は私のウィッシュリストの上位にあります)が、ここにクラッジがあります。

あらゆる「もの」(xyzzy など) で機能するロケールごとに個別のルールを設定できます。しかし、どのロケールが呼び出されるかは事前にわかりませんが、どのような ext0 ファイルが存在するかはわかっているため、すべての「もの」に対してルールを作成することをお勧めします。

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

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

$(foreach thing,$(THINGS),$(eval $(call TEMPLATE,$(thing))))
于 2010-06-17T23:34:59.403 に答える