2

我想不出一种方法来为以下使用 make 的生产定义通用模式规则:

xyzzy-en_US.ext2来自xyzzy.ext0via的要求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)
  # ...
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 回答