圖表與示意圖

Doxygen 內建支援為 C++ 類別產生繼承圖。

Doxygen 可以使用 graphviz 的「dot」工具來產生更進階的圖表和圖形。Graphviz 是一個開源、跨平台的圖形繪製工具組,可以在 https://graphviz.dev.org.tw/ 找到。

如果您的路徑中有「dot」工具,您可以在設定檔中將 HAVE_DOT 設定為 YES,讓 Doxygen 使用它。

Doxygen 使用「dot」工具來產生以下圖形

  • 將會繪製類別階層的圖形表示,以及文字表示。目前此功能僅支援 HTML。
    警告:當您有非常大的類別階層,其中許多類別繼承自一個共同的基底類別時,產生的圖像可能會變得太大,導致某些瀏覽器無法處理。
  • 將為每個有文件的類別產生繼承圖,顯示直接和間接的繼承關係。這會停用內建類別繼承圖的產生。
  • 為每個包含至少一個其他檔案的文件產生包含相依性圖。此功能目前僅支援 HTML 和 RTF。
  • 也會產生反向包含相依性圖,顯示對於一個(標頭)檔案,哪些其他檔案包含它。
  • 為每個有文件的類別和結構繪製圖形,顯示
    • 與基底類別的繼承關係。
    • 與其他結構和類別的使用關係(例如,類別 A 有一個類型為類別 B 的成員變數 m_a,則 A 有一個指向 B 的箭頭,標籤為 m_a)。
  • 如果 CALL_GRAPH 設定為 YES,則會為每個函數繪製圖形化的呼叫圖,顯示函數直接或間接呼叫的函數(另請參閱 呼叫圖隱藏呼叫圖 小節)。
  • 如果 CALLER_GRAPH 設定為 YES,則會為每個函數繪製圖形化的呼叫者圖,顯示函數直接或間接被哪些函數呼叫(另請參閱 呼叫者圖隱藏呼叫者圖 小節)。
  • 如果 DIRECTORY_GRAPH 設定為 YES,Doxygen 將為每個目錄產生顯示目錄相依性的圖。圖形將目錄顯示為方塊。子目錄會巢狀顯示在其父目錄的方塊中。圖形的深度透過 DIR_GRAPH_MAX_DEPTH 設定。目錄之間的包含相依性顯示為箭頭。

使用 版面配置檔案,您可以決定實際顯示哪些圖形。

選項 DOT_GRAPH_MAX_NODESMAX_DOT_GRAPH_DEPTH 可用於限制各種圖形的大小。

HTML 和 RTF 中類別圖中的元素具有以下含義

  • 黃色方塊表示類別。方塊的右下角可能有一個小標記,表示該類別包含隱藏的基底類別。對於類別圖,目前最大的樹狀寬度為 8 個元素。如果樹狀結構更寬,則會隱藏某些節點。如果方塊填充虛線圖案,則表示繼承關係是虛擬的。
  • 白色方塊表示目前顯示該類別的文件。
  • 灰色方塊表示未記錄的類別。
  • 實心深藍色箭頭表示公有繼承。
  • 虛線深綠色箭頭表示受保護的繼承。
  • 點狀深綠色箭頭表示私有繼承。

{\LaTeX} 中類別圖中的元素具有以下含義

  • 白色方塊表示類別。方塊右下角的標記表示該類別有隱藏的基底類別。如果方塊具有虛線邊框,則表示虛擬繼承。
  • 實心箭頭表示公有繼承。
  • 虛線箭頭表示受保護的繼承。
  • 點狀箭頭表示私有繼承。

由 dot 工具產生的圖形中的元素具有以下含義

  • 白色方塊表示類別或結構或檔案。
  • 具有紅色邊框的方塊表示節點具有比顯示的更多箭頭!換句話說:該圖相對於此節點是截斷的。有時截斷圖形的原因是防止圖像變得太大。對於使用 dot 產生的圖形,Doxygen 嘗試將結果圖像的寬度限制為 1024 像素。
  • 黑色方塊表示目前顯示該類別的文件。
  • 深藍色箭頭表示包含關係(對於包含相依性圖)或公有繼承(對於其他圖形)。
  • 深綠色箭頭表示受保護的繼承。
  • 深紅色箭頭表示私有繼承。
  • 紫色虛線箭頭表示「使用」關係,箭頭邊緣標示了造成該關係的變數。如果類別 A 有一個類型為 C 的成員變數 m,其中 B 是 C 的子類型(例如,C 可以是 BB*T<B>*),則類別 A 使用類別 B

目錄相依性圖中的元素具有以下含義

  • 具有粗體邊框的方塊表示已產生目錄相依性圖的目錄。
  • 具有紅色實心邊框的方塊表示其子目錄未顯示在圖中的目錄(「已截斷」)。若要設定顯示在圖中的子目錄深度,請參閱 DIR_GRAPH_MAX_DEPTH
  • 具有紅色虛線邊框的方塊表示已截斷的目錄,其父目錄也不會顯示在圖中。
  • 具有非紅色虛線邊框的方塊表示顯示了至少一個子目錄,但不是全部。
  • 具有淺灰色邊框的方塊表示同時具有以下兩個屬性的目錄
    • 其父目錄未顯示。
    • 至少顯示一個子目錄。
  • 沒有背景顏色的方塊表示不是顯示之原始父目錄的子目錄的目錄。原始目錄是指顯示目錄相依性圖的目錄。
  • 兩個方塊之間的箭頭表示兩個目錄之間的包含相依性。如果一個目錄中的檔案包含另一個目錄中的檔案,則存在包含相依性。如果圖形中未顯示涉及包含相依性的目錄,則箭頭會連接到顯示的第一個父目錄。此父目錄會顯示為已截斷(見上文)。

以下是一些標頭檔,它們一起顯示 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 用於產生示意圖。

前往下一節或返回索引