Makefile通用模式规则——xyzy.ext0中的xyzy-en_US.ext2
我想不出一种方法来为make的以下生产类型定义通用模式规则: 需要Makefile通用模式规则——xyzy.ext0中的xyzy-en_US.ext2,makefile,gnu-make,Makefile,Gnu Make,我想不出一种方法来为make的以下生产类型定义通用模式规则: 需要xyzy-en_US.ext2从xyzy.ext0通过xyzy.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 但是如何概括第二条规则的区域设置部分呢?或者我需要为
xyzy-en_US.ext2
从xyzy.ext0
通过xyzy.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)
# ...
使用Make没有什么好办法(regex处理在我的愿望清单上很重要),但这里有一个难题 您可以为每个区域设置一个单独的规则,该规则适用于任何“东西”(xyzy或其他任何东西)。但由于您事先不知道将调用什么语言环境,但您确实知道存在什么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))))