大規模なソフトウェア プロジェクトで etags を使用して TAGS テーブルを生成しようとしています。TAGS ファイルは、lex/yacc で生成された .c ファイルの #line ディレクティブが # の代わりに非修飾ファイル名を参照するため、サブディレクトリに存在するファイルではなく、最上位に存在しないファイルへのエントリを持つことになります。ファイルを含むサブディレクトリを含む行。
トップレベルのファイルとして解釈されるのではなく、サブディレクトリ内の既存のファイルに適切に解決されたこれらの #line ディレクティブを使用して TAGS テーブルを生成するにはどうすればよいですか?
最上位ディレクトリから次のような etags を実行します。
rm -f TAGS; find . \( -not -regex '.*include/.*' \)
-a \( -name '*.h' -o -name '*.hh' -o -name '*.y' -o -name '*.l'
-o -name '*.cc' -o -name '*.cpp' -o -name '*.hpp' -o -name '*.c'
-o -name '*.inl' \)
| xargs etags -o TAGS --append
しかし、生成されたファイルの途中に次の行を含むファイル act/Par.c があります。
#define T_NUM 274
#define T_STRING 275
#line 5 "Par.y"
#undef actCPMeshConfigIn_yywrap
#define actCPMeshConfigIn_YYMAXDEPTH 20000
その結果、次の TAGS テーブル エントリが生成されます。
act/Par.c,1160
[...]
#define T_NUM 92,2870
#define T_STRING 93,2888
Par.y,1320
#undef actCPMeshConfigIn_yywrap20,
#define actCPMeshConfigIn_YYMAXDEPTH 22,
しかし、ファイル Par.y は実際には act/Par.y にありますが、#line ディレクティブは現在のファイルに対して相対的ですが、TAGS はそれを生成された TAGS ファイルに対して相対的にします。
プロジェクトのビルド方法を変更せずに、TAGS ファイルを生成して、これらの #line ディレクティブが、それらが含まれるファイルに関連するものとして適切に解釈されるようにするにはどうすればよいですか? または、これらの面倒なファイルを簡単にスキップするにはどうすればよいですか?