Makefile 通用模式规则——来自 xyzzy.ext0 的 xyzzy-en_US.ext2

发布于 2024-09-06 05:41:19 字数 501 浏览 9 评论 0原文

我无法找到一种方法来使用 make 为以下类型的生产定义通用模式规则:

require xyzzy-en_US.ext2 from xyzzy.ext0 via 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)
  # ...

I can't figure out a way to define a generic pattern rule for the following kind of production with make:

require xyzzy-en_US.ext2 from xyzzy.ext0 via xyzzy.ext1.

This works:

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

But how to generalize the locale part of the second rule? Or do I need to generate rules for all different locales?

Neither of these work:

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

羁〃客ぐ 2024-09-13 05:41:19

使用 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))))

There is no good way to do this with Make (regex handling is high on my wishlist) but here is a kludge.

You can have a separate rule for each locale which will work with any "thing" (xyzzy, or whatever). But since you don't know beforehand what locale will be called for, but you do know what ext0 files exist, it might be better to make a rule for every "thing":

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

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

$(foreach thing,$(THINGS),$(eval $(call TEMPLATE,$(thing))))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文