2012-02-15 2 views
1

Makefile을 사용하여 언어 변환/변환을 수행합니다. 모든 언어에 대해 XML에서 특정 형식으로 변환하는 규칙이 있습니다.Makefile에서 비슷한 규칙을 병합하는 방법은 무엇입니까?

이러한 유사한 패턴을 따라 하나의 규칙으로 결합하는 방법은 무엇입니까?
더 많은 언어를 추가하면이 Makefile의 코드가 커집니다.

이 경우 대상에 대한 접미사를 변경할 수 없습니다 (de_DE -> de_DE.txt). 그게 더 쉬울거야!

# 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

네, 가능한 해결책 중 하나입니다. 그러나 외부 도구를 사용하지 않고이 작업을 수행하는 방법은 무엇입니까? make로 해결하고 싶습니다. –

+0

이 접근법은'gcc'가'cpp -> .h' 의존성을 가진'.dep' 파일을 생성하는 것과 비슷합니다. –

4

GNU의 메이크업이를 지원하지만 방식으로 내가 아주 유지 보수 찾습니다 구문과 의미를 파악하기 어렵다.

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

그것은 작동합니다! 이 템플릿을 가져 주셔서 감사합니다. 그것은 저에게 많은 일을 덜어줍니다. –

관련 문제