実行ファイル doxygen
は、ソースを解析しドキュメントを生成する主要なプログラムです。より詳細な使用方法については、セクション Doxygenの使用方法 を参照してください。
オプションとして、実行ファイル doxywizard
を使用できます。これは、Doxygenが使用する設定ファイルを編集し、グラフィカル環境でDoxygenを実行するためのグラフィカルフロントエンドです。macOSでは、DoxygenアプリケーションアイコンをクリックするとDoxywizardが起動します。
以下の図は、ツール間の関係と情報の流れを示しています(複雑に見えますが、これは網羅しようとしているためです)
まず、使用するプログラミング/ハードウェア記述言語がDoxygenによって認識される可能性が高いことを確認してください。以下のプログラミング言語はデフォルトでサポートされています: C, C++, Lex, C#, Objective-C, IDL, Java, PHP, Python, Fortran, および D。Doxygenはハードウェア記述言語VHDLもデフォルトでサポートしています。特定のファイルタイプの拡張子を特定のパーサーで使用するように設定することが可能です。詳細は設定/拡張マッピングを参照してください。また、プリプロセッサプログラムを使用することで、全く異なる言語をサポートすることも可能です。詳細はヘルパーページを参照してください。
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は、ファイルの拡張子を見て、そのファイルをどのように解析するかを以下の表を使用して決定します
拡張子 | 言語 | 拡張子 | 言語 | 拡張子 | 言語 |
---|---|---|---|---|---|
.dox | C / C++ | .HH | C / C++ | .py | Python |
.doc | C / C++ | .hxx | C / C++ | .pyw | Python |
.c | C / C++ | .hpp | C / C++ | .f | Fortran |
.cc | C / C++ | .h++ | C / C++ | .for | Fortran |
.cxx | C / C++ | .mm | C / C++ | .f90 | Fortran |
.cpp | C / C++ | .txt | C / C++ | .f95 | Fortran |
.c++ | C / C++ | .idl | IDL | .f03 | Fortran |
.cppm | C / C++ | .ddl | IDL | .f08 | Fortran |
.ccm | C / C++ | .odl | IDL | .f18 | Fortran |
.cxxm | C / C++ | .java | Java | .vhd | VHDL |
.c++m | C / C++ | .cs | C# | .vhdl | VHDL |
.ii | C / C++ | .d | D | .ucf | VHDL |
.ixx | C / C++ | .php | PHP | .qsf | VHDL |
.ipp | C / C++ | .php4 | PHP | .l | Lex |
.i++ | C / C++ | .php5 | PHP | .md | Markdown |
.inl | C / C++ | .inc | PHP | .markdown | Markdown |
.h | C / C++ | .phtml | PHP | .ice | Slice |
.H | C / C++ | .m | Objective-C | ||
.hh | C / C++ | .M | Objective-C |
上記のリストは、FILE_PATTERNSでデフォルトで設定されている項目よりも多くの項目が含まれている場合があることに注意してください。
解析されない拡張子は、FILE_PATTERNSに追加し、適切なEXTENSION_MAPPINGが設定されている場合に設定できます。
既存のプロジェクトでDoxygenの使用を開始する場合(Doxygenが認識するドキュメントがない場合)、構造がどうなっているか、ドキュメント化された結果がどのように見えるかを知ることができます。これを行うには、設定ファイル内のEXTRACT_ALLタグを YES
に設定する必要があります。これにより、Doxygenはソース内のすべてがドキュメント化されているとみなします。結果として、EXTRACT_ALLが YES
に設定されている限り、未ドキュメントのメンバーに関する警告は生成されないことに注意してください。
既存のソフトウェアを分析するには、(ドキュメント化された)エンティティをソースファイル内のその定義と相互参照すると便利です。Doxygenは、SOURCE_BROWSERタグを YES
に設定すると、そのような相互参照を生成します。また、INLINE_SOURCESを YES
に設定することで、ソースを直接ドキュメントに含めることもできます(これはコードレビューなどに便利です)。
ドキュメントを生成するには、次のように入力できます
doxygen <config-file>
設定に応じて、Doxygenは出力ディレクトリ内に html
, rtf
, latex
, xml
, man
, および/または docbook
ディレクトリを作成します。これらの名前が示すように、これらのディレクトリにはHTML, RTF, , XML, Unix-Manページ, およびDocBook形式で生成されたドキュメントが含まれます。
デフォルトの出力ディレクトリは、doxygen
が起動されたディレクトリです。出力が書き込まれるルートディレクトリは、OUTPUT_DIRECTORY を使用して変更できます。出力ディレクトリ内のフォーマット固有のディレクトリは、設定ファイルのHTML_OUTPUT、RTF_OUTPUT、LATEX_OUTPUT、XML_OUTPUT、MAN_OUTPUT、およびDOCBOOK_OUTPUTタグを使用して選択できます。出力ディレクトリが存在しない場合、doxygen
はそれを自動的に作成しようとします(ただし、mkdir -p
のようにパス全体を再帰的に作成しようとはしません)。
生成されたHTMLドキュメントは、html
ディレクトリ内の index.html
ファイルをHTMLブラウザで開くことで表示できます。最適な結果を得るためには、カスケーディングスタイルシート(CSS)をサポートするブラウザを使用してください(私は生成された出力をテストするためにMozilla Firefox、Google Chrome、Safari、そして時にはIE8、IE9、Operaを使用しています)。
HTMLセクションの一部の機能(GENERATE_TREEVIEWや検索エンジンなど)は、Dynamic HTMLとJavaScriptをサポートするブラウザを必要とします。
生成されたドキュメントは、まず
コンパイラでコンパイルする必要があります(私はLinuxおよびmacOSには最近のteTeXディストリビューションを、WindowsにはMikTexを使用しています)。生成されたドキュメントのコンパイルプロセスを簡素化するために、
doxygen
はlatex
ディレクトリに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_HYPERLINKS と USE_PDFLATEX タグを YES
に設定する必要があります。この場合、Makefile
には refman.pdf
を直接ビルドするターゲットのみが含まれます。
DoxygenはRTF出力を refman.rtf という単一のファイルに結合します。このファイルはMicrosoft Wordへのインポートに最適化されています。特定の情報は、いわゆるフィールドを使用してエンコードされます。実際の値を表示するには、すべてを選択(編集 - すべて選択)してからフィールドを切り替える必要があります(右クリックしてドロップダウンメニューからオプションを選択)。
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パスに含まれていることを確認する必要があります(MANPATH
環境変数を参照)。manページ形式の機能にはいくつかの制限があるため、一部の情報(クラス図、相互参照、数式など)は失われることに注意してください。
DoxygenはDocBook形式でも出力を生成できます。DocBook出力の処理方法は、このマニュアルの範囲外です。
ソースのドキュメント化はステップ3として提示されていますが、新しいプロジェクトではもちろんステップ1であるべきです。ここでは、すでにいくつかのコードがあり、DoxygenにAPI、場合によっては内部構造、および関連する設計ドキュメントも記述した素晴らしいドキュメントを生成させたいと仮定します。
設定ファイルでEXTRACT_ALLオプションが NO
(デフォルト)に設定されている場合、Doxygenはドキュメント化されたエンティティのみのドキュメントを生成します。では、これらをどのようにドキュメント化するのでしょうか?メンバー、クラス、および名前空間には、基本的に2つのオプションがあります
メンバー、クラス、または名前空間の宣言または定義の前に特殊なドキュメントブロックを配置します。ファイル、クラス、および名前空間のメンバーの場合、ドキュメントをメンバーの直後に配置することも許可されています。
特殊なドキュメントブロックの詳細については、セクション 特殊コメントブロック を参照してください。
特殊なドキュメントブロックを別の場所(別のファイルまたは別のロケーション)に配置し、構造コマンドをドキュメントブロック内に記述します。構造コマンドは、ドキュメントブロックをドキュメント化可能な特定のエンティティ(例:メンバー、クラス、名前空間、ファイル)にリンクします。
構造コマンドの詳細については、セクション 他の場所でのドキュメント化 を参照してください。
最初のオプションの利点は、エンティティの名前を繰り返す必要がないことです。
ファイルの前にドキュメントブロックを配置する方法がないため、ファイルは2番目のオプションを使用してのみドキュメント化できます。もちろん、ファイルメンバー(関数、変数、typedef、define)は明示的な構造コマンドを必要としません。それらの前または後ろに特殊なドキュメントブロックを配置するだけで問題ありません。
特殊なドキュメントブロック内のテキストは、HTMLおよび/または出力ファイルに書き込まれる前に解析されます。