入門

実行ファイル doxygen は、ソースを解析しドキュメントを生成する主要なプログラムです。より詳細な使用方法については、セクション Doxygenの使用方法 を参照してください。

オプションとして、実行ファイル doxywizard を使用できます。これは、Doxygenが使用する設定ファイルを編集し、グラフィカル環境でDoxygenを実行するためのグラフィカルフロントエンドです。macOSでは、DoxygenアプリケーションアイコンをクリックするとDoxywizardが起動します。

以下の図は、ツール間の関係と情報の流れを示しています(複雑に見えますが、これは網羅しようとしているためです)

Doxygenの情報フロー

ステップ0: Doxygenが使用するプログラミング/ハードウェア記述言語をサポートしているか確認する

まず、使用するプログラミング/ハードウェア記述言語がDoxygenによって認識される可能性が高いことを確認してください。以下のプログラミング言語はデフォルトでサポートされています: C, C++, Lex, C#, Objective-C, IDL, Java, PHP, Python, Fortran, および D。Doxygenはハードウェア記述言語VHDLもデフォルトでサポートしています。特定のファイルタイプの拡張子を特定のパーサーで使用するように設定することが可能です。詳細は設定/拡張マッピングを参照してください。また、プリプロセッサプログラムを使用することで、全く異なる言語をサポートすることも可能です。詳細はヘルパーページを参照してください。

ステップ1: 設定ファイルの作成

Doxygenは、すべての設定を決定するために設定ファイルを使用します。各プロジェクトは独自の設定ファイルを持つべきです。プロジェクトは単一のソースファイルで構成することもできますが、再帰的にスキャンされるソースツリー全体である場合もあります。

設定ファイルの作成を簡素化するために、Doxygenはテンプレート設定ファイルを生成できます。これを行うには、コマンドラインから -g オプションを付けて doxygen を呼び出します

doxygen -g <config-file>

ここで <config-file> は設定ファイルの名前です。ファイル名を省略すると、Doxyfile という名前のファイルが作成されます。<config-file> という名前のファイルが既に存在する場合、Doxygenは設定テンプレートを生成する前にそれを <config-file>.bak にリネームします。ファイル名として - (マイナス記号) を使用すると、Doxygenは標準入力 (stdin) から設定ファイルを読み込もうとします。これはスクリプティングに役立ちます。

設定ファイルは、(シンプルな)Makefileに似た形式を持っています。以下のような形式の多数の割り当て(タグ)で構成されます

TAGNAME = VALUE または
TAGNAME = VALUE1 VALUE2 ...

生成されたテンプレート設定ファイル内のほとんどのタグの値は、デフォルト値のままにしておくことができます。設定ファイルに関する詳細は、セクション 設定 を参照してください。

テキストエディタで設定ファイルを編集したくない場合は、Doxywizardを見てください。これは、Doxygen設定ファイルの作成、読み込み、書き込みができ、ダイアログを介して設定オプションを設定できるGUIフロントエンドです。

いくつかのCおよび/またはC++のソースファイルとヘッダーファイルからなる小さなプロジェクトの場合、INPUTタグを空のままにしても、Doxygenは現在のディレクトリでソースを探します。

ソースディレクトリまたはツリーで構成される大規模なプロジェクトの場合、ルートディレクトリまたはディレクトリをINPUTタグに割り当て、1つ以上のファイルパターンをFILE_PATTERNSタグに追加する必要があります(例えば *.cpp *.h)。パターンに一致するファイルのみが解析されます(パターンが省略された場合、Doxygenがサポートするファイルタイプに対して一般的なパターンリストが使用されます)。ソースツリーの再帰的な解析には、RECURSIVEタグを YES に設定する必要があります。解析されるファイルのリストをさらに細かく調整するには、EXCLUDE および EXCLUDE_PATTERNS タグを使用できます。例えば、ソースツリーからすべての test ディレクトリを除外するには、次のように使用できます

EXCLUDE_PATTERNS = */test/*

Doxygenは、ファイルの拡張子を見て、そのファイルをどのように解析するかを以下の表を使用して決定します

拡張子言語拡張子言語拡張子言語
.doxC / C++.HHC / C++.pyPython
.docC / C++.hxxC / C++.pywPython
.cC / C++.hppC / C++.fFortran
.ccC / C++.h++C / C++.forFortran
.cxxC / C++.mmC / C++.f90Fortran
.cppC / C++.txtC / C++.f95Fortran
.c++C / C++.idlIDL.f03Fortran
.cppmC / C++.ddlIDL.f08Fortran
.ccmC / C++.odlIDL.f18Fortran
.cxxmC / C++.javaJava.vhdVHDL
.c++mC / C++.csC#.vhdlVHDL
.iiC / C++.dD.ucfVHDL
.ixxC / C++.phpPHP.qsfVHDL
.ippC / C++.php4PHP.lLex
.i++C / C++.php5PHP.mdMarkdown
.inlC / C++.incPHP.markdownMarkdown
.hC / C++.phtmlPHP.iceSlice
.HC / C++.mObjective-C   
.hhC / C++.MObjective-C   

上記のリストは、FILE_PATTERNSでデフォルトで設定されている項目よりも多くの項目が含まれている場合があることに注意してください。

解析されない拡張子は、FILE_PATTERNSに追加し、適切なEXTENSION_MAPPINGが設定されている場合に設定できます。

既存のプロジェクトでDoxygenの使用を開始する場合(Doxygenが認識するドキュメントがない場合)、構造がどうなっているか、ドキュメント化された結果がどのように見えるかを知ることができます。これを行うには、設定ファイル内のEXTRACT_ALLタグを YES に設定する必要があります。これにより、Doxygenはソース内のすべてがドキュメント化されているとみなします。結果として、EXTRACT_ALLYES に設定されている限り、未ドキュメントのメンバーに関する警告は生成されないことに注意してください。

既存のソフトウェアを分析するには、(ドキュメント化された)エンティティをソースファイル内のその定義と相互参照すると便利です。Doxygenは、SOURCE_BROWSERタグを YES に設定すると、そのような相互参照を生成します。また、INLINE_SOURCESYES に設定することで、ソースを直接ドキュメントに含めることもできます(これはコードレビューなどに便利です)。

ステップ2: Doxygenの実行

ドキュメントを生成するには、次のように入力できます

doxygen <config-file>

設定に応じて、Doxygenは出力ディレクトリ内に html, rtf, latex, xml, man, および/または docbook ディレクトリを作成します。これらの名前が示すように、これらのディレクトリにはHTML, RTF, {\LaTeX}, XML, Unix-Manページ, およびDocBook形式で生成されたドキュメントが含まれます。

デフォルトの出力ディレクトリは、doxygen が起動されたディレクトリです。出力が書き込まれるルートディレクトリは、OUTPUT_DIRECTORY を使用して変更できます。出力ディレクトリ内のフォーマット固有のディレクトリは、設定ファイルのHTML_OUTPUTRTF_OUTPUTLATEX_OUTPUTXML_OUTPUTMAN_OUTPUT、およびDOCBOOK_OUTPUTタグを使用して選択できます。出力ディレクトリが存在しない場合、doxygen はそれを自動的に作成しようとします(ただし、mkdir -p のようにパス全体を再帰的に作成しようとはしません)。

HTML出力

生成されたHTMLドキュメントは、html ディレクトリ内の index.html ファイルをHTMLブラウザで開くことで表示できます。最適な結果を得るためには、カスケーディングスタイルシート(CSS)をサポートするブラウザを使用してください(私は生成された出力をテストするためにMozilla Firefox、Google Chrome、Safari、そして時にはIE8、IE9、Operaを使用しています)。

HTMLセクションの一部の機能(GENERATE_TREEVIEWや検索エンジンなど)は、Dynamic HTMLとJavaScriptをサポートするブラウザを必要とします。

LaTeX出力

生成された{\LaTeX}ドキュメントは、まず{\LaTeX}コンパイラでコンパイルする必要があります(私はLinuxおよびmacOSには最近のteTeXディストリビューションを、WindowsにはMikTexを使用しています)。生成されたドキュメントのコンパイルプロセスを簡素化するために、doxygenlatexディレクトリにMakefileを書き込みます(Windowsプラットフォームではmake.batバッチファイルも生成されます)。

Makefile の内容とターゲットは、USE_PDFLATEX の設定に依存します。これが無効(NO に設定)の場合、latex ディレクトリで make と入力すると、refman.dvi という名前の dvi ファイルが生成されます。このファイルは xdvi を使用して表示するか、make ps と入力することでPostScriptファイル refman.ps に変換できます(これには dvips が必要です)。

1つの物理ページに2ページを配置するには、代わりに make ps_2on1 を使用します。結果のPostScriptファイルはPostScriptプリンターに送信できます。PostScriptプリンターをお持ちでない場合は、ghostscriptを使用してPostScriptをプリンターが理解できる形式に変換してみてください。

ghostscriptインタープリタをインストールしている場合、PDFへの変換も可能です。 make pdf (または make pdf_2on1 )と入力するだけです。

PDF出力で最良の結果を得るには、PDF_HYPERLINKSUSE_PDFLATEX タグを YES に設定する必要があります。この場合、Makefile には refman.pdf を直接ビルドするターゲットのみが含まれます。

RTF出力

DoxygenはRTF出力を refman.rtf という単一のファイルに結合します。このファイルはMicrosoft Wordへのインポートに最適化されています。特定の情報は、いわゆるフィールドを使用してエンコードされます。実際の値を表示するには、すべてを選択(編集 - すべて選択)してからフィールドを切り替える必要があります(右クリックしてドロップダウンメニューからオプションを選択)。

XML出力

XML出力は、Doxygenによって収集された情報の構造化された「ダンプ」で構成されます。各複合体(クラス/名前空間/ファイル/...)は独自のXMLファイルを持ち、index.xml というインデックスファイルもあります。

combine.xslt というXSLTスクリプトも生成され、すべてのXMLファイルを1つのファイルに結合するために使用できます。

Doxygenは、2つのXMLスキーマファイル index.xsd (インデックスファイル用)と compound.xsd (複合ファイル用)も生成します。このスキーマファイルは、可能な要素、それらの属性、およびそれらがどのように構造化されているかを記述します。つまり、XMLファイルの文法を記述し、検証やXSLTスクリプトの制御に使用できます。

addon/doxmlparser ディレクトリには、Doxygenによって生成されたXML出力を増分的に読み込むためのパーサーライブラリがあります(ライブラリのインターフェースについては、addon/doxmlparser/doxmparser/index.py および addon/doxmlparser/doxmlparser/compound.py を参照してください)。

Manページ出力

生成されたmanページは、man プログラムを使用して表示できます。manディレクトリがmanパスに含まれていることを確認する必要があります(MANPATH 環境変数を参照)。manページ形式の機能にはいくつかの制限があるため、一部の情報(クラス図、相互参照、数式など)は失われることに注意してください。

DocBook出力

DoxygenはDocBook形式でも出力を生成できます。DocBook出力の処理方法は、このマニュアルの範囲外です。

ステップ3: ソースのドキュメント化

ソースのドキュメント化はステップ3として提示されていますが、新しいプロジェクトではもちろんステップ1であるべきです。ここでは、すでにいくつかのコードがあり、DoxygenにAPI、場合によっては内部構造、および関連する設計ドキュメントも記述した素晴らしいドキュメントを生成させたいと仮定します。

設定ファイルでEXTRACT_ALLオプションが NO (デフォルト)に設定されている場合、Doxygenはドキュメント化されたエンティティのみのドキュメントを生成します。では、これらをどのようにドキュメント化するのでしょうか?メンバー、クラス、および名前空間には、基本的に2つのオプションがあります

  1. メンバー、クラス、または名前空間の宣言または定義の前に特殊なドキュメントブロックを配置します。ファイル、クラス、および名前空間のメンバーの場合、ドキュメントをメンバーの直後に配置することも許可されています。

    特殊なドキュメントブロックの詳細については、セクション 特殊コメントブロック を参照してください。

  2. 特殊なドキュメントブロックを別の場所(別のファイルまたは別のロケーション)に配置し、構造コマンドをドキュメントブロック内に記述します。構造コマンドは、ドキュメントブロックをドキュメント化可能な特定のエンティティ(例:メンバー、クラス、名前空間、ファイル)にリンクします。

    構造コマンドの詳細については、セクション 他の場所でのドキュメント化 を参照してください。

最初のオプションの利点は、エンティティの名前を繰り返す必要がないことです。

ファイルの前にドキュメントブロックを配置する方法がないため、ファイルは2番目のオプションを使用してのみドキュメント化できます。もちろん、ファイルメンバー(関数、変数、typedef、define)は明示的な構造コマンドを必要としません。それらの前または後ろに特殊なドキュメントブロックを配置するだけで問題ありません。

特殊なドキュメントブロック内のテキストは、HTMLおよび/または{\LaTeX}出力ファイルに書き込まれる前に解析されます。

解析中には以下のステップが行われます

  • Markdown書式は、対応するHTMLまたは特殊コマンドに置き換えられます。
  • ドキュメント内の特殊コマンドが実行されます。すべてのコマンドの概要については、セクション 特殊コマンド を参照してください。
  • 行がいくつかの空白に続き、1つ以上のアスタリスク(*)、そしてオプションでさらに空白で始まる場合、すべての空白とアスタリスクは削除されます。
  • 結果として生じるすべての空白行は段落区切りとして扱われます。これにより、生成されたドキュメントを読みやすくするために、自分で改段落コマンドを配置する必要がなくなります。
  • ドキュメント化されたクラスに対応する単語にはリンクが作成されます(ただし、単語の前に%がある場合を除く。その場合、単語はリンクされず、%記号は削除されます)。
  • テキスト内で特定のパターンが見つかった場合、メンバーへのリンクが作成されます。自動リンク生成の仕組みの詳細については、セクション 自動リンク生成 を参照してください。
  • ドキュメント内のHTMLタグは解釈され、{\LaTeX}出力のために{\LaTeX}同等のものに変換されます。サポートされているすべてのHTMLタグの概要については、セクション HTMLコマンド を参照してください。

次のセクションへ移動するか、インデックスに戻る。