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との詳しい連携は知りません。ゆとりです。