5

Perl Template Toolkit を使用して C ファイルを生成しています。C コンパイラからのエラー メッセージが間違った場所 (テンプレート出力) ではなく正しい場所 (テンプレート ファイル) に送られるように、C コードに #line ディレクティブをインクルードできるようにしたいと心から思っています。しかし、私はこれを行う方法がわかりません。私が Google から得た唯一の結果は、Template Toolkit メーリング リストの未回答のメッセージでした。

自分でテンプレート ファイルを読み込んで行番号を追加するような面倒な解決策を想像できますが、Template Toolkit で元のファイルの行番号を取得するためのトリックや賢明な方法さえある人はいますか?

4

4 に答える 4

2

Template::Parser の location メソッドが適切な #line ディレクティブを返すように見えますが、それを出力に含める組み込み関数はありません。そのようにするには、Template Toolkit を拡張する必要があります。

于 2009-12-07T05:42:28.757 に答える
0

Template::Toolkit がこれをネイティブにサポートしているようには見えません。できることの 1 つは、生成された行の適切なテンプレート内の行へのマッピングもプログラムに書き込むことです。これにより、簡単なスクリプトでエラーを調べることができます。

于 2009-12-07T07:12:11.320 に答える
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

于 2009-12-07T13:44:56.530 に答える
0

#line ディレクティブでは番号と「ファイル名」が完全に構成されているため (必要に応じて)、わずかに異なるコンテキストを使用して #line ディレクティブをテンプレートに配置することをお勧めします。

テンプレートのプリプロセッサを使用しても、自分でテンプレートの行をカウントするのではなく、それを行うことができます。テンプレートのさまざまなセクションのファイル名を「発明」し、数えることができる小さな番号でそれらの行に番号を付けます。

次に、「... in line 2 of div id='topleft'」というエラー メッセージが表示される場合があります。

于 2009-12-07T05:44:05.957 に答える