2009-12-07 4 views
5

C 파일을 생성하기 위해 Perl 템플릿 툴킷을 사용하고 있습니다. C 컴파일러의 오류 메시지가 잘못된 위치 (템플릿 출력)가 아닌 올바른 위치 (템플릿 파일)로 보내 지도록 C 코드에 #line 지시문을 포함시킬 수 있기를 정말로 바랍니다. 그러나, 나는 이것을 어떻게하는지 모른다. Google에서 얻은 유일한 결과는 템플릿 툴킷 메일 링리스트에있는 답변되지 않은 메시지였습니다.템플릿 툴킷이있는 라인 번호

필자 자신이 템플릿 파일을 읽고 행 번호를 추가하는 것과 같은 고민은 있지만 Template Toolkit에서 원본 파일의 행 번호를 얻는 방법은 누구나 알고 있습니까?

답변

2

Template :: Parser의 위치 지정 방법이 적합한 #line 지시문을 반환하지만 필자가 출력에 포함시키려는 함수가 없습니다. 그렇게하려면 Template Toolkit을 확장해야합니다.

+0

나는 그것을 할 방법이 없다는 것을 받아 들일 것이며 전처리기를 통해 라인 지시어를 추가하는 무차별 방식을 사용한다. –

0

숫자와 "파일 이름"이 #line 지시문에서 완전히 구성되어 있으므로 약간 다른 문맥을 사용하여 #line 지시문을 템플릿에 넣는 것이 좋습니다.

템플릿 사전 처리기를 사용하여 직접 템플릿에서 줄 수를 계산하는 것이 아니라 할 수 있습니다. 필자는 템플릿의 여러 섹션에 대한 파일 이름을 고안하고 셀 수있는 작은 숫자로 번호를 지정합니다.

그런 다음 오류 메시지가

그것은 템플릿 :: 툴킷처럼 보이지 않는
0

는 기본적으로이를 지원 "사업부 아이디 = '좌상'의 2 행에 ..."말할 수 있습니다. 당신이 할 수있는 한 가지는 프로그램이 생성 된 라인을 해당 템플릿의 라인에 작성하여 간단한 스크립트로 오류를 찾아 볼 수 있도록하는 것입니다.

+0

'C-x \'' –

+0

C-x'가 생성 된 코드에서 오류로 건너 뛰고 다른 키를 매핑하여 줄에서 해당 항목을 찾는 스크립트를 호출하려고합니다. Emacs에서 두 가지 일을하는 특별한 항목을 만들 수도 있습니다. –

0

무차별 솔루션 : 필요한 경우

#!/usr/local/bin/perl 
use warnings; 
use strict; 
my $file = "something.c"; 
open my $input, "<", $file or die $!; 
while (<$input>) { 
    print "#line $. \"$file\"\n"; 
    print; 
} 
close $input or die $!; 

더 좋은 라인에 [% 만에 대한 테스트는 #line의를 인쇄 할 수 있습니다.