Doxygen には、物事をグループ化するための3つのメカニズムがあります。1つ目のメカニズムはグローバルレベルで機能し、各グループに対して新しいページを作成します。これらのグループは、ドキュメントでは「トピック」と呼ばれます。2つ目のメカニズムは、複合エンティティのメンバーリスト内で機能し、「メンバーグループ」と呼ばれます。ページには、サブページ化と呼ばれる3つ目のグループ化メカニズムがあります。
グループ化とは、トピックと呼ばれる個別のページに物事をまとめる方法です。グループ全体と、すべての個々のメンバーをドキュメント化できます。グループのメンバーには、ファイル、名前空間、クラス、概念、モジュール、関数、変数、列挙型、typedef、および定義だけでなく、他のグループも含まれます。
グループを定義するには、特別なコメントブロック内に\defgroupコマンドを記述する必要があります。コマンドの最初の引数は、グループを一意に識別するラベルです。2番目の引数は、ドキュメントに表示されるグループの名前またはタイトルです。
エンティティを特定のグループのメンバーにするには、そのドキュメントブロック内に\ingroupコマンドを記述します。
各メンバーのドキュメントに\ingroupコマンドを記述するのを避けるために、グループの前に開始マーカー@{、グループの後に終了マーカー@}を付けて、メンバーをグループ化することもできます。マーカーは、グループ定義のドキュメントまたは別のドキュメントブロックに配置できます。
グループ自体も、これらのグループ化マーカーを使用してネストできます。
同じグループラベルを複数回使用すると、エラーメッセージが表示されます。Doxygen に一意のラベルを強制させたくない場合は、\defgroupの代わりに\addtogroupを使用できます。\defgroupとまったく同じように使用できますが、グループが既に定義されている場合は、既存のドキュメントと新しいドキュメントを自動的にマージします。このコマンドではグループのタイトルはオプションなので、
/** \addtogroup <label>
* @{
*/
...
/** @}*/
をどこかでより詳細に定義されているグループに、追加のメンバーを追加するために使用できます。
複合エンティティ(クラス、ファイル、名前空間など)は複数のグループに配置できますが、メンバー(変数、関数、typedef、列挙型など)は1つのグループのメンバーにしかなれないことに注意してください(この制限は、メンバーがそのクラス、名前空間、またはファイルのコンテキストでドキュメント化されておらず、グループの一部としてのみ表示される場合に、曖昧なリンクターゲットを回避するために設けられています)。
Doxygen は、最も「優先順位」の高い定義を持つグループにメンバーを配置します。たとえば、明示的な\ingroupは、@{ @}による暗黙的なグループ化定義を上書きします。同じ優先順位を持つ競合するグループ化定義は、いずれかの定義が明示的なドキュメントを持たないメンバーのものでない限り、警告をトリガーします。
次の例では、VarInA をグループ A に配置し、IntegerVariable の2番目のインスタンスがドキュメント化されていないため、IntVariables グループに配置することで競合を自動的に解決します。
/**
* \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)コマンドが含まれており、グループのヘッダーを指定するために使用されます。オプションで、コメントブロックはグループに関するより詳細な情報も含むことができます。
メンバーグループのネストは許可されていません。
クラス内のメンバーグループのすべてのメンバーが同じ型と保護レベルを持つ場合(たとえば、すべてが静的パブリックメンバーである場合)、メンバーグループ全体は型/保護レベルグループのサブグループとして表示されます(たとえば、「静的パブリックメンバー」セクションのサブセクションとして表示されます)。2つ以上のメンバーが異なる型を持つ場合、グループは自動生成されたグループと同じレベルに配置されます。クラスのすべてのメンバーグループを最上位に強制的に配置したい場合は、クラスのドキュメント内に\nosubgroupingコマンドを記述する必要があります。
Doxygenによって生成される対応するHTMLドキュメントはこちらをクリックしてください。
ここでは、Group1 は「Public Members」のサブセクションとして表示されます。Group2 は異なる保護レベル(つまり public と protected)のメンバーを含むため、個別のセクションとして表示されます。
情報は、\pageおよび\mainpageコマンドを使用してページにグループ化できます。通常、これはページのフラットなリストになり、「メイン」ページがリストの最初に表示されます。
topicsセクションで説明されているアプローチを使用して構造を追加する代わりに、\subpageコマンドを使用してページに構造を追加する方が自然で便利な場合が多いです。
ページAの場合、\subpageコマンドは別のページBへのリンクを追加すると同時に、ページBをAのサブページにします。これにより、2つのグループGAとGBが作成され、GBはGAの一部であり、ページAはグループGAに、ページBはグループGBに配置されます。