2012-02-27 23 views
2

私はGCCXMLがもう管理されていないことを知りました(私は最後のバージョンがCVSリポジトリから2009年だと思います)。人々は通常、clangをチェックすることを提案しますが、同様の出力を生成する方法を説明した包括的なドキュメントは見つかりませんでした。必ずしもXMLではなく、解析可能な形式(バイナリ形式またはあいまいな形式の文書化された形式)の同じ情報です。最近のgccバージョンから同じ情報を取得する方法がある場合は、それも問題ありません。gcc-xmlのようなclangでメタデータ出力を生成するにはどうすればよいですか?

これは、C++コードの動的呼び出しのための趣味プロジェクト用です。私は同様のプロジェクト(pygccxml、xrtti、openC++)について知っていますが、その点は楽しいものです。

答えて

3

以前はClangでxmlダンプを印刷する方法がありましたが、多かれ少なかれサポートされていて削除されました。さまざまな段階でダンプを取得する開発者のオプションがありますが、そのフォーマットは人間が消費するものであり、不安定です。

  • いずれかを直接C++からクランを使用して、例えばRecursiveASTVisitor実装
  • またはCまたはC++からlibclangを使用を使用する:

    クランユーザのための推薦は、常にコード統合されています。

gccのとは違って、打ち鳴らすはを再利用するためのライブラリのセットとして考えられるので、試してみて、いくつかの打ち鳴らすの出力のためのパーサを書くことはあまり意味がありません:それはちょうどはるかにエラーが発生しやすいですソースの情報を消費するだけではありません。

+1

注意: 'libclang'は一般的にサードパーティのツールを構築することを意図しており、リリース間のバイナリ互換性に大きな注意を払っています。 –

+0

ありがとう、私はこれと一緒に行くと思います。 –

0

これを行うには、GCCプラグインをコード化することができます。より良い方法は、MELTです。 GCC 4.6以降のバージョンが必要です(4.7がすぐに出てくる)。

しかし、GCCを拡張するには、GCCを拡張するのに適したドメイン固有の言語であるMELTで拡張されたCで拡張されたプラグインを使用するのが時間がかかります。メインGCCのほとんどを理解して処理する必要があるからです内部表現(ジプルとツリー)。

あなたがMELTを使いたい場合は、私はあなたを助けてくれることを嬉しく思います。

+0

特定のバージョンで溶融はどのように依存しますか? MELT拡張機能を開発した場合、コンパイラのそれ以降のバージョンで動作することは合理的に確認できますか? –

+0

それはプラグインと同じように依存しています... GCC 4.6のC言語でプラグインをコーディングしても、GCC 4.7で動作するという保証はありません。(確かに再コンパイルする必要があります。それを再加工する必要があるかもしれない)。その点で、MELTはCのプラグインより優れていません。GCCは現在、プラグイン用の安定したAPIを約束していないので、MELTはそれを約束できません!実際には、最新のGCCリリース(今日の4.6)と将来のリリース(今日の4.7)でMELTリリースを動作させようとしています。 –

関連する問題