Правило общего шаблонного файла - xyzzy-en_US.ext2 из xyzzy.ext0 - PullRequest
2 голосов
/ 17 июня 2010

Я не могу найти способ определить общее шаблонное правило для следующего вида продукции с помощью make:

требуется xyzzy-en_US.ext2 от xyzzy.ext0 до xyzzy.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)
  # ...

1 Ответ

4 голосов
/ 18 июня 2010

Нет хорошего способа сделать это с помощью Make (обработка регулярных выражений высока в моем списке пожеланий), но здесь есть kludge.

Вы можете иметь отдельное правило для каждой локали, которое будет работать с любой "вещью""(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))))
...