Doxygen 有三種機制可以將事物群組在一起。一種機制在全域層級運作,為每個群組建立一個新頁面。這些群組在文件中稱為 「主題」。第二種機制在某個複合實體的成員列表中運作,稱為「成員群組」。對於頁面,還有第三種群組機制,稱為子頁面。
群組化是一種將事物在獨立頁面(稱為主題)上群組在一起的方法。您可以將群組整體記錄下來,也可以記錄所有個別成員。群組的成員可以是檔案、命名空間、類別、概念、模組、函式、變數、列舉、typedef 和 define,也可以是其他群組。
若要定義群組,您應該在特殊的註解區塊中放入 \defgroup 命令。命令的第一個引數是一個標籤,應該唯一識別群組。第二個引數是群組的名稱或標題,它應顯示在文件中。
您可以將實體設為特定群組的成員,方法是在其文件區塊內放入 \ingroup 命令。
為避免在每個成員的文件中放入 \ingroup 命令,您也可以將成員群組在一起,方法是在群組之前使用開頭標記 @{
,並在群組之後使用結尾標記 @}
。這些標記可以放在群組定義的文件中,或放在獨立的文件區塊中。
群組本身也可以使用這些群組標記來巢狀結構化。
當您多次使用相同的群組標籤時,會收到錯誤訊息。如果您不希望 Doxygen 強制執行唯一的標籤,則可以使用 \addtogroup,而不是 \defgroup。它的使用方式與 \defgroup 完全相同,但是當群組已定義時,它會默默地將現有的文件與新的文件合併。群組的標題對於此命令是可選的,因此您可以使用
/** \addtogroup <label> * @{ */ ... /** @}*/
將其他成員新增到在其他地方更詳細定義的群組。
請注意,複合實體(如類別、檔案和命名空間)可以放入多個群組中,但成員(如變數、函式、typedef 和列舉)只能是一個群組的成員(此限制是為了避免在成員未在其類別、命名空間或檔案的內容中記錄,而僅作為群組的一部分可見時,產生不明確的連結目標)。
Doxygen 會將成員放入具有最高「優先順序」的定義群組中:例如,明確的 \ingroup 會覆寫透過 @{
@}
的隱含群組定義。具有相同優先順序的衝突群組定義會觸發警告,除非其中一個定義是針對沒有任何明確文件的成員。
下列範例將 VarInA 放入群組 A 中,並透過將 IntegerVariable 放入群組 IntVariables 來默默解決 IntegerVariable 的衝突,因為 IntegerVariable 的第二個實例沒有文件。
/** * \ingroup A */ extern int VarInA; /** * \defgroup IntVariables Global integer variables * @{ */ /** an integer variable */ extern int IntegerVariable; /**@}*/ .... /** * \defgroup Variables Global variables */ /**@{*/ /** a variable in group A */ int VarInA; int IntegerVariable; /**@}*/
可以使用 \ref 命令來參照群組。\ref 命令的第一個引數應該是群組的標籤。若要使用自訂連結名稱,您可以在標籤之後用雙引號括住連結名稱,如下列範例所示
This is the \ref group_label "link" to this group.
群組定義的優先順序為(從最高到最低):\ingroup、\defgroup、\addtogroup、\weakgroup。\weakgroup 命令與 \addtogroup 完全相同,但優先順序較低。新增它是為了允許「惰性」群組定義:您可以使用 .h 檔案中具有較高優先順序的命令來定義階層,並在 .c 檔案中使用 \weakgroup,而無需完全複製階層。
按一下此處,以取得 Doxygen 產生的對應 HTML 文件。
如果複合實體(例如類別或檔案)具有許多成員,通常會希望將它們群組在一起。Doxygen 已自動將相同類型和保護層級的事物群組在一起,但您可能覺得這還不夠,或是預設群組設定錯誤。例如,因為您認為不同(語法)類型的成員屬於相同的(語義)群組。
成員群組由
///@{ ... ///@}
區塊或
/**@{*/ ... /**@}*/
如果您偏好 C 樣式註解,則使用區塊定義。請注意,群組的成員應實際位於成員群組的主體內。
在區塊的開頭標記之前,可以放置獨立的註解區塊。此區塊應包含 @name(或 \name)命令,用於指定群組的標頭。選擇性地,註解區塊也可能包含有關群組的更多詳細資訊。
不允許成員群組巢狀結構化。
如果類別內成員群組的所有成員都具有相同的類型和保護層級(例如,全部都是靜態公用成員),則整個成員群組會顯示為類型/保護層級群組的子群組(例如,該群組會顯示為「靜態公用成員」區段的子區段)。如果兩個或多個成員具有不同的類型,則群組會與自動產生的群組放在相同的層級。如果您想要強制類別的所有成員群組都位於最上層,則應將 \nosubgrouping 命令放在類別的文件中。
按一下此處,以取得 Doxygen 產生的對應 HTML 文件。
此處 Group1 會顯示為「公用成員」的子區段。而 Group2 則是單獨的區段,因為它包含具有不同保護層級的成員(即公用和受保護)。
資訊可以使用 \page 和 \mainpage 命令群組到頁面中。通常,這會產生平面的頁面清單,「主要」頁面是清單中的第一個。
除了使用 主題章節中描述的方法新增結構之外,通常使用 \subpage 命令為頁面新增額外結構會更自然且方便。
對於頁面 A,\subpage 命令會新增另一個頁面 B 的連結,同時將頁面 B 設為 A 的子頁面。這會產生兩個群組 GA 和 GB,其中 GB 是 GA 的一部分,頁面 A 放在群組 GA 中,而頁面 B 放在群組 GB 中。