よくある質問

目次

HTMLのインデックスページに情報を表示する方法は?

次のようにコメントブロック内で\mainpageコマンドを使用する必要があります。

/*! \mainpage My Personal Index Page
 *
 * \section intro_sec Introduction
 *
 * This is the introduction.
 *
 * \section install_sec Installation
 *
 * \subsection step1 Step 1: Opening the box
 *
 * etc...
 */

ヘルプ、クラス / ファイル / 名前空間のメンバーの一部またはすべてがドキュメント化されていません。

以下を確認してください。

  1. あなたのクラス / ファイル / 名前空間はドキュメント化されていますか?もしされていなければ、設定ファイルでEXTRACT_ALLYESに設定されていない限り、ソースから抽出されません。
  2. メンバーはプライベートですか?もしそうなら、ドキュメントに表示させるにはEXTRACT_PRIVATEYESに設定する必要があります。
  3. クラスに関数マクロがあり、セミコロンで終わっていませんか(例:MY_MACRO())?もしそうなら、Doxygenのプリプロセッサにそれを削除するよう指示する必要があります。

    これは通常、設定ファイルで以下の設定を行うことになります。

    ENABLE_PREPROCESSING   = YES
    MACRO_EXPANSION        = YES
    EXPAND_ONLY_PREDEF     = YES
    PREDEFINED             = MY_MACRO()=
    

    詳細については、マニュアルのプリプロセッシングのセクションをお読みください。

EXTRACT_ALLをNOに設定すると、関数がドキュメントに表示されません。

グローバル関数、変数、列挙型、typedef、およびdefineをドキュメント化するには、これらのコマンドが配置されているファイルを、\file(または@file)コマンドを含むコメントブロックを使用してドキュメント化する必要があります。

あるいは、\ingroupコマンドを使用してすべてのメンバーをグループ(またはトピック)に入れ、その後\defgroupコマンドを含むコメントブロックを使用してグループをドキュメント化することもできます。

メンバー関数や名前空間の一部である関数については、クラスまたは名前空間のいずれかをドキュメント化する必要があります。

カスタム拡張子を持つファイルが(正しく)パースされません(もう)。

Doxygenは、入力として指定されたファイル(INPUTタグ経由)と、指定された拡張子(FILE_PATTERNSに記載)に一致するファイルのみをパースします。ファイルのリストは、EXCLUDEとしてリストされたファイルや、EXCLUDE_PATTERNSで設定されたパターンに一致するファイルを除外することで絞り込まれます。

以前のDoxygenは、未知の拡張子を持つすべてのファイルをCファイルとしてパースしており、望ましくない結果を招く可能性がありました。バージョン1.8.8以降、Doxygenは特定のファイル拡張子に対してどのパーサーを使用するかを指定するマッピングを要求します。このマッピングはEXTENSION_MAPPINGタグを使用して指定します。マッピングが指定されていない場合、ファイルの内容は無視されます。

Doxygenに特定のコード断片を無視させるにはどうすればよいですか?

新しい最も簡単な方法は、無視すべきコードの先頭に\condコマンドを含むコメントブロックを、末尾に\endcondコマンドを含むコメントブロックを追加することです。これはもちろん同じファイル内にある必要があります。

しかし、Doxygenのプリプロセッサを使用することもできます。次のように記述した場合:

#ifndef DOXYGEN_SHOULD_SKIP_THIS

 /* code that must be skipped by Doxygen */

#endif /* DOXYGEN_SHOULD_SKIP_THIS */

非表示にしたいブロックの周囲に配置し、

  PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS

設定ファイルに記述すると、ENABLE_PREPROCESSINGYESに設定されている限り、Doxygenはすべてのブロックをスキップします。

クラスのドキュメントの#includeの後ろの内容を変更するには?

ほとんどの場合、パスのユーザー定義部分を削除するためにSTRIP_FROM_INC_PATHを使用できます。

クラスを次のようにドキュメント化することもできます。

/*! \class MyClassName include.h path/include.h
 *
 *  Docs for MyClassName
 */

Doxygenに次のように出力させるには:

#include <path/include.h>

MyClassNameの定義が含まれている実際のヘッダーファイルの名前に関係なく、MyClassNameクラスのドキュメントに上記の内容を記述します。

Doxygenにインクルードファイルが山括弧ではなく引用符を使用してインクルードされるべきであることを示したい場合は、次のように入力します。

/*! \class MyClassName myhdr.h "path/myhdr.h"
 *
 *  Docs for MyClassName
 */

圧縮HTMLと組み合わせてタグファイルを使用するには?

圧縮HTMLファイルa.chmから別の圧縮HTMLファイルb.chmを参照したい場合、a.chm内のリンクは次の形式である必要があります。

<a href="mk:@MSITStore:b.chm::/file.html">

残念ながら、これは両方の圧縮HTMLファイルが同じディレクトリにある場合にのみ機能します。

結果として、生成されたすべてのプロジェクトのindex.chmファイルを一意の名前に変更し、すべての.chmファイルを1つのディレクトリに配置する必要があります。

タグファイルb.tagを使用してプロジェクトbを参照するプロジェクトaがあるとします。その場合、プロジェクトaindex.chma.chmに、プロジェクトbindex.chmb.chmに名前変更できます。プロジェクトaの設定ファイルには次のように記述します。

TAGFILES = b.tag=mk:@MSITStore:b.chm::

各HTMLページの上部にあるクイックインデックスが気に入らないのですが、どうすればよいですか?

DISABLE_INDEXYESに設定することで、インデックスを無効にできます。その後、独自のヘッダーファイルを作成し、それをHTML_HEADERに指定することで、独自のヘッダーを含めることができます。

HTMLヘッダーファイルだけを使いたかったのに、全体のHTML出力が異なって見えます

Doxygenが生成するスタイルシートdoxygen.cssを含めるのを忘れている可能性があります。これを組み込むには、次のように記述します。

<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">

HTMLページのHEADセクションに。

DoxygenはなぜQtを使用するのですか?

以前(バージョン1.9.2より前)、DoxygenはさまざまなユーティリティクラスにQt 2.xの一部を使用していました。これらはその間にSTLコンテナクラスに置き換えられました。

Doxywizardと呼ばれるGUIフロントエンドは、最新バージョンのQtに基づいています。Doxygen自体はGUIなしでも使用できます。

ディレクトリツリーからすべてのテストディレクトリを除外するには?

設定ファイルに次のような除外パターンを記述するだけです。

EXCLUDE_PATTERNS = */test/*

Doxygenは実行中のテキスト内のMyClassクラスへのリンクを自動的に生成します。特定の場所でそれを防ぐにはどうすればよいですか?

クラス名の前に`%`を付けます。例:%MyClass。するとDoxygenは`%`を削除し、その単語をリンクなしで保持します。

私の好きなプログラミング言語はXです。それでもDoxygenを使えますか?

いいえ、そのままでは使えません。Doxygenは読み取るものの構造を理解する必要があります。もし時間をかけることをいとわないのであれば、いくつかの選択肢があります。

  • Xの文法がCまたはC++に近い場合、src/scanner.lを少し調整して言語がサポートされるようにするのはおそらくそれほど難しくありません。これはDoxygenが直接サポートする他のすべての言語(Java、IDL、C#、PHPなど)で行われています。
  • Xの文法が多少異なる場合、Doxygenが理解できる程度にXをC/C++に似たものに変換する入力フィルターを作成できます(このアプローチはVB、Object Pascal、JavaScriptで採用されています。詳細はhttps://doxygen.dokyumento.jp/helpers.htmlを参照)。
  • 文法が全く異なる場合、X用のパーサーを作成し、src/scanner.l(およびタグファイルを読み込む際のsrc/tagreader.cpp)と同様の構文ツリーを生成するバックエンドを作成することもできます。

ヘルプ!「input buffer overflow, can't enlarge buffer because scanner uses REJECT」(入力バッファオーバーフロー、スキャナーがREJECTを使用しているためバッファを拡張できません)という不可解なメッセージが表示されます。

このエラーは、Doxygenの字句スキャナーが一度に256KBを超える入力文字に一致するルールを持っている場合に発生します。私はこれを非常に大きな生成ファイル(256KBを超える行数)で見たことがあり、そのファイルでは組み込みのプリプロセッサが空のファイル(256KBを超える改行を含む)に変換していました。他に発生する可能性があるケースとして、コードに256KBを超える文字を含む行がある場合が挙げられます。

このようなケースに遭遇し、修正を希望される場合は、このメッセージをトリガーするコード断片をお送りください。この問題を回避するには、ファイルに改行をいくつか入れるか、より小さな部分に分割するか、またはEXCLUDEを使用して入力から除外してください。

この問題を回避するもう1つの方法は、cmakeコマンドを次のオプションと共に使用することです。

-Denlarge_lex_buffers=<size>

ここで<size>は、入力(YY_BUF_SIZE)および読み取り(YY_READ_BUF_SIZE)バッファの新しいサイズです。このオプションが指定されていない場合、デフォルト値の262144(つまり256KB)が使用されます。

latexディレクトリでmakeを実行すると、「TeX capacity exceeded」(TeXの容量を超過しました)というエラーが出ます。どうすればよいですか?

texmf.cfgファイルを編集して、様々なバッファのデフォルト値を増やし、その後「texconfig init」を実行してください。

STLクラスを介した依存関係がdotグラフに表示されないのはなぜですか?

BUILTIN_STL_SUPPORTオプションがオンになっていない限り、DoxygenはSTLクラスを認識しません。

PHP5および/またはWindowsで検索エンジンを動作させるのに問題があります

どこを調べるべきかについては、こちらをお読みください。

コマンドラインからDoxygenを設定できますか?

コマンドラインオプション経由ではありませんが、Doxygenはstdinから読み取ることができるため、パイプで渡すことができます。設定ファイルのオプションをコマンドラインから上書きする方法の例を以下に示します(UNIXライクな環境を想定)。

( cat Doxyfile ; echo "PROJECT_NUMBER=1.0" ) | doxygen -

Windowsコマンドラインでは、次のコマンドで同じことができます。

( type Doxyfile & echo PROJECT_NUMBER=1.0 ) | doxygen.exe -

Windows Powershell(バージョン5.1で確認済み)では、次のコマンドで同じことができます。

&{ type Doxyfile ; echo "PROJECT_NUMBER=1.0" } | doxygen -

同じ名前の複数のオプションが指定された場合、Doxygenは最後のものを使用します。既存のオプションに追加するには、`+=`演算子を使用できます。

Doxygenという名前はどのようにして付けられましたか?

Doxygenは「documentation」(ドキュメンテーション)と「generator」(ジェネレーター)という言葉を組み合わせて名付けられました。

documentation -> docs -> dox
generator -> gen

当時、lexyaccについて調べていたのですが、多くのものが「yy」で始まるため、「y」が入り込み、発音しやすくなりました(正しい発音はDocs-ee-genで、長い「e」の音です)。

Doxygenを開発した理由は何ですか?

私はかつてQtライブラリに基づいたGUIウィジェットを作成しました(現在もhttps://sourceforge.net/projects/qdbttabular/で入手可能ですが、2002年以降更新されていません)。Qtは内部ツールを使用してうまくドキュメントを生成しており(彼らは公開したがらなかった)、私も同様のドキュメントを手動で作成していました。これは維持管理の悪夢だったので、同様のツールを求めました。Doc++も検討しましたが、十分ではありませんでした(シグナルとスロットをサポートしておらず、私が好きになったQtのルック&フィールがありませんでした)。そこで、自分自身のツールを書き始めました…

出力のインターリーブを防ぐ方法

Doxygenのすべてのコンソール出力、つまりメッセージや警告をリダイレクトすると、出力がインターリーブされたり、予期しない順序になったりする可能性があります。その技術的な理由は、stdoutがバッファリングされるためです。これはDoxygenの-bオプションを使用することで回避できます(例:doxygen -b > out.txt 2>&1)。ただし、これにはわずかに余分な時間がかかる場合があります。

次のセクションに進むか、インデックスに戻ります。