Doxygenは、C++クラスの継承図を生成するための組み込みサポートを提供しています。
Doxygenは、より高度な図やグラフを生成するために、Graphvizの「dot」ツールを使用できます。Graphvizはオープンソースのクロスプラットフォームのグラフ描画ツールキットで、https://graphviz.dokyumento.jp/で入手できます。
PATH (環境変数) に「dot」ツールがある場合、Doxygenがそれを使用するように、設定ファイルでHAVE_DOTをYESに設定できます。
Doxygenは「dot」ツールを使用して、以下のグラフを生成します
- クラス階層のグラフィック表現が、テキスト表現とともに描画されます。現在、この機能はHTMLのみでサポートされています。
警告: 多数のクラスが共通の基底クラスから派生するような非常に大きなクラス階層がある場合、結果として得られる画像が一部のブラウザにとって大きすぎて扱えない場合があります。
- 各文書化されたクラスについて、直接および間接の継承関係を示す継承グラフが生成されます。これにより、組み込みのクラス継承図の生成は無効になります。
- 他のファイルを少なくとも1つ含む、各文書化されたファイルについて、インクルード依存関係グラフが生成されます。この機能は現在、HTMLおよびRTFのみでサポートされています。
- また、インバースインクルード依存関係グラフも生成され、ある(ヘッダー)ファイルがどの他のファイルにインクルードされているかを示します。
- 各文書化されたクラスと構造体について、以下のグラフが描画されます。
- 基底クラスとの継承関係。
- 他の構造体およびクラスとの使用関係(例:クラス
AがクラスB型のメンバ変数m_aを持つ場合、Aはm_aをラベルとしてBへの矢印を持ちます)。
- CALL_GRAPHがYESに設定されている場合、各関数についてグラフィカルな呼び出しグラフが描画され、その関数が直接または間接に呼び出す関数が示されます(セクション\callgraphとセクション\hidecallgraphも参照してください)。
- CALLER_GRAPHがYESに設定されている場合、各関数についてグラフィカルな呼び出し元グラフが描画され、その関数が直接または間接に呼び出される関数が示されます(セクション\callergraphとセクション\hidecallergraphも参照してください)。
- DIRECTORY_GRAPHがYESに設定されている場合、Doxygenはすべてのディレクトリのディレクトリ依存関係を示すグラフを生成します。グラフはディレクトリを箱として表示します。サブディレクトリは親ディレクトリの箱の中にネストして表示されます。グラフの深さはDIR_GRAPH_MAX_DEPTHで設定されます。ディレクトリ間のインクルード依存関係は矢印で示されます。
レイアウトファイルを使用すると、実際に表示されるグラフを決定できます。
オプションDOT_GRAPH_MAX_NODESとMAX_DOT_GRAPH_DEPTHは、さまざまなグラフのサイズを制限するために使用できます。
HTMLとRTFのクラス図の要素は、以下の意味を持ちます。
- 黄色の箱はクラスを示します。箱の右下隅に小さなマーカーがある場合、そのクラスには非表示の基底クラスが含まれていることを示します。クラス図の場合、現在の最大ツリー幅は8要素です。ツリーがこれより広い場合、一部のノードは非表示になります。箱が破線パターンで塗りつぶされている場合、継承関係は仮想です。
- 白い箱は、現在クラスのドキュメントが表示されていることを示します。
- 灰色の箱は、ドキュメント化されていないクラスを示します。
- 実線の濃い青色の矢印は、public継承を示します。
- 破線の濃い緑色の矢印は、protected継承を示します。
- 点線の濃い緑色の矢印は、private継承を示します。
のクラス図の要素は、以下の意味を持ちます。
- 白い箱はクラスを示します。箱の右下隅のマーカーは、そのクラスに非表示の基底クラスがあることを示します。箱に破線の境界線がある場合、仮想継承を示します。
- 実線の矢印はpublic継承を示します。
- 破線の矢印はprotected継承を示します。
- 点線の矢印はprivate継承を示します。
dotツールによって生成されたグラフの要素は、以下の意味を持ちます。
- 白い箱はクラス、構造体、またはファイルを示します。
- 赤い境界線を持つ箱は、表示されているよりも多くの矢印を持つノードを示します!言い換えれば、グラフはこのノードに関して切り詰められています。グラフが切り詰められる理由の1つは、画像が大きくなりすぎるのを防ぐためです。dotで生成されるグラフの場合、Doxygenは結果画像の幅を1024ピクセルに制限しようとします。
- 黒い箱は、現在クラスのドキュメントが表示されていることを示します。
- 濃い青色の矢印は、インクルード関係(インクルード依存関係グラフの場合)またはpublic継承(他のグラフの場合)を示します。
- 濃い緑色の矢印はprotected継承を示します。
- 濃い赤色の矢印はprivate継承を示します。
- 紫色の破線の矢印は「使用」関係を示し、矢印のエッジには関係の原因となる変数でラベルが付けられます。クラス
AがクラスBを使用するのは、クラスAが型Cのメンバ変数mを持ち、BがCのサブタイプである場合です(例:CはB、B*、T<B>*のいずれかであり得ます)。
ディレクトリ依存関係グラフの要素は、以下の意味を持ちます。
- 太字の境界線を持つ箱は、ディレクトリ依存関係グラフが生成されたディレクトリを示します。
- 赤色の実線の境界線を持つ箱は、サブディレクトリがグラフに表示されていないディレクトリ(「切り詰められた」)を示します。グラフに表示されるサブディレクトリの深さを設定するには、DIR_GRAPH_MAX_DEPTHを参照してください。
- 赤色の破線の境界線を持つ箱は、その親ディレクトリもグラフに表示されていない切り詰められたディレクトリを示します。
- 赤色以外の破線の境界線を持つ箱は、すべてではないが少なくとも1つのサブディレクトリが表示されていることを示します。
- 薄い灰色の境界線を持つ箱は、以下の2つの属性の両方を持つディレクトリを示します。
- その親ディレクトリは表示されていません。
- 少なくとも1つのサブディレクトリが表示されています。
- 背景色なしの箱は、表示されている元の親ディレクトリのサブディレクトリではないディレクトリを示します。元とは、ディレクトリ依存関係グラフが表示されているディレクトリです。
- 2つの箱の間の矢印は、2つのディレクトリ間のインクルード依存関係を示します。インクルード依存関係は、あるディレクトリ内のファイルが別のディレクトリのファイルをインクルードする場合に存在します。インクルード依存関係に関与するディレクトリがグラフに表示されていない場合、矢印は表示されている最初の親ディレクトリに接続されます。この親ディレクトリは切り詰められたものとして表示されます(上記参照)。
Doxygenが生成できるさまざまな図を示すヘッダーファイルの例をいくつか示します。
diagrams_a.h
#ifndef DIAGRAMS_A_H
#define DIAGRAMS_A_H
class A { public: A *m_self; };
#endif
diagrams_b.h
#ifndef DIAGRAMS_B_H
#define DIAGRAMS_B_H
class A;
class B { public: A *m_a; };
#endif
diagrams_c.h
#ifndef DIAGRAMS_C_H
#define DIAGRAMS_C_H
#include "diagrams_c.h"
class D;
class C : public A { public: D *m_d; };
#endif
diagrams_d.h
#ifndef DIAGRAM_D_H
#define DIAGRAM_D_H
#include "diagrams_a.h"
#include "diagrams_b.h"
class C;
class D : virtual protected A, private B { public: C m_c; };
#endif
diagrams_e.h
#ifndef DIAGRAM_E_H
#define DIAGRAM_E_H
#include "diagrams_d.h"
class E : public D {};
#endif
Doxygenによって生成される対応するHTMLドキュメントはこちらをクリックしてください。EXTRACT_ALL = YESを使用して図が生成されることに注意してください。
次のセクションに進むか、インデックスに戻ります。