2012-02-15 3 views
1

私は言語変換/変換を行うためにMakefileを使用します。 すべての言語について、XMLから特定の形式への変換を行うルールがあります。Makefileで同様のルールをマージするには?

これらの類似パターンを1つのルールに結合するにはどうすればよいですか?
さらに多くの言語を追加すると、このMakefileのコードが膨らんでしまいます。

この場合、ターゲットの接尾辞(de_DE - > de_DE.txt)を変更することはできません。 これは簡単になります!ここで

はMakefileのです:

# german translation 
%.de_DE: %.de_DE.xml 
    @java $(JAVA_PAR) $(CONVERTER) $< [email protected] 

# turkish translation 
%.tr_TR: %.tr_TR.xml 
    @java $(JAVA_PAR) $(CONVERTER) $< [email protected] 

# cz translation 
%.cs_CZ: %.cs_CZ.xml 
    @java $(JAVA_PAR) $(CONVERTER) $< [email protected] 
+0

'%:%.xml'が緩すぎますか? – Beta

+0

はい、そうです。 –

答えて

0

あなたが代わりに(例えばperl mk_lang_rules.pl > lang_rules.make)言語規則を生成し、あなたのメイクファイルにinclude lang_rules.makeを追加することができます。 どこmk_lang_rules.plは、例えば、以下のようなものです:

#!/usr/bin/perl 
use strict; 
use warnings; 

my %langs = (
     "german" => "de_DE", 
     "turkish" => "tr_TR", 
     "cz" => "cs_CZ", 
); 

foreach my $lang (keys %langs) { 
     my $code = $langs{$lang}; 
     print "\n# $lang translation\n"; 
     print "%.$code: %.$code.xml\n"; 
     print "\t\@java \$(JAVA_PAR) \$(CONVERTER) \$< \[email protected]\n"; 
} 
print "\n"; 
+0

はい、これが可能な解決策の1つです。しかし、外部ツールを使わずにこの仕事をどうやって行うのですか?私はmakeでそれを解決したいと思います。 –

+0

このアプローチは、 'gcc'が' cpp - > .h '依存関係を持つ '.dep'ファイルをどのように生成するのかと似ています。 –

4

GNUのmakeはこれをサポートしていますが、ではない方法で、私は非常に保守見つける: 構文と意味が把握するのは難しいです。

LANGS := de_DE tr_TR cs_CS en_US nl_NL 

define LANG_template 
# translation 
%.$1: %.$1.xml 
    @java $(JAVA_PAR) $(CONVERTER) $$< [email protected] 
endef 

$(foreach l, $(LANGS), \ 
    $(eval $(call LANG_template,$(l))) \ 
) 

ドル記号が二重になっています。シェル変数を持つレシピでは、4つになります。

+0

それは動作します!このテンプレートをありがとう。それは私に多くの仕事を節約する。 –

関連する問題