如何在 Makefile 中合并相似的规则?
我使用 Makefile 进行语言翻译/转换。 对于每种语言,都有一个从 XML 到特定格式的转换规则。
如何将这些相似的模式组合成一条规则?
添加更多语言会使该 Makefile 中的代码变得臃肿。
在这种情况下,我无法更改目标的后缀(de_DE -> de_DE.txt)。 这样会更容易!
这是生成文件:
# german translation
%.de_DE: %.de_DE.xml
@java $(JAVA_PAR) $(CONVERTER) $< $@
# turkish translation
%.tr_TR: %.tr_TR.xml
@java $(JAVA_PAR) $(CONVERTER) $< $@
# cz translation
%.cs_CZ: %.cs_CZ.xml
@java $(JAVA_PAR) $(CONVERTER) $< $@
I use a Makefile to do language translations/conversions.
For every language there is a rule to do the conversion from XML to a specific format.
How to combine following these similar patterns into one rule?
Adding more languages would bloat the code in this Makefile.
In this case I cannot change the suffix for targets (de_DE -> de_DE.txt).
That would make it easier!
Here is the Makefile:
# german translation
%.de_DE: %.de_DE.xml
@java $(JAVA_PAR) $(CONVERTER) lt; $@
# turkish translation
%.tr_TR: %.tr_TR.xml
@java $(JAVA_PAR) $(CONVERTER) lt; $@
# cz translation
%.cs_CZ: %.cs_CZ.xml
@java $(JAVA_PAR) $(CONVERTER) lt; $@
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
GNU make 支持这一点,但不是以我认为非常可维护的方式:
语法和语义很难掌握。
请注意双重美元符号。在带有 shell 变量的配方中,您最终会得到四个。
GNU make supports this, but not in a way I find very maintainable:
the syntax and semantics are hard to grasp.
Note the doubled dollar signs. In recipes with shell variables you'll end up with four.
您可以改为生成语言规则(例如
perl mk_lang_rules.pl > lang_rules.make
)并将include lang_rules.make
添加到您的 makefile 中。例如,其中 mk_lang_rules.pl 如下所示:
You can instead generate the language rules (e.g.
perl mk_lang_rules.pl > lang_rules.make
) and addinclude lang_rules.make
to your makefile.Where mk_lang_rules.pl is like the following for instance: