doxygen+graphvizでファイルの依存関係をグラフ化
doxygenはCとかC++とかのsourceファイルのドキュメント化システムです。
Doxygen is a documentation system for C++, C, Java, Objective-C, Python, IDL (Corba and Microsoft flavors), Fortran, VHDL, PHP, C#, and to some extent D.
そしてopen source graph visualization softwareであるところのgraphvizを組み合わせると、doxygenで解析したsourceの情報をグラフにして出力することが出来ます。
doxygenはsourceをドキュメント化するのに、クラスや名前空間や、インクルードの依存関係なんかも解析してくれるので、
#include <iostream> #include "derived_class.hpp" #include "user.hpp" #include "utility.hpp" //このファイルをドキュメント化するように指示するために必要。 //! @file int main() { Derived d; User u(d); foo(u); }
こんなsourceに対して、INCLUDE_GRAPHオプションをつけてdoxygenを実行すると
こんな出力をしてくれます。
INCLUDED_BY_GRAPHを指定しておくと、逆にインクルードされているグラフも出力することが出来ます。
CLASS_DIAGRAMを指定しておけば、クラス図を出力することも出来ます。
作成したグラフがHTMLなので市販の解析ツールみたいに出力したグラフを( ‘д‘)つ))`Д´)グリグリ動かしたり出来ないですが、グラフの出力はそんなに乱れなさそうですし、グラフのノードはそのドキュメントにハイパーリンクしてるので、結構いいかもと思いました。doxygenを、単に関数とかに付けたコメントをHTML出力できるだけのものだろうとか思ってて御免なさい。すばらしいです。
ちなみにdoxywizardというGUIフロントエンドを使っているので、graphvizとの詳しい連携は知りません。ゆとりです。