よくある質問

目次

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コマンドを含むコメントブロックを1つ、末尾に\endcondコマンドを含むコメントブロックを1つ追加することです。もちろん、これは同じファイル内に記述する必要があります。

しかし、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つのディレクトリに配置する必要があります。

プロジェクト *a* がタグファイル b.tag を使用してプロジェクト *b* を参照していると仮定すると、プロジェクト *a* の index.chma.chm に、プロジェクト *b* の index.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の文法が多少異なる場合は、XをDoxygenが理解できるC/C++に十分類似した形式に変換する入力フィルターを作成できます (このアプローチはVB、Object Pascal、JavaScriptで採用されています。https://doxygen.dokyumento.jp/helpers.html を参照)。
  • 文法が完全に異なる場合は、Xのパーサーを作成し、src/scanner.l (およびタグファイルを読み込む際の src/tagreader.cpp) と同様の構文ツリーを生成するバックエンドを作成することができます。

助けて!「入力バッファオーバーフロー、スキャナーがREJECTを使用しているためバッファを拡大できません」という不可解なメッセージが表示されます。

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

このようなケースに遭遇し、私に修正してほしい場合は、メッセージをトリガーするコードフラグメントを送ってください。問題を回避するには、ファイルに改行を追加するか、より小さな部分に分割するか、EXCLUDEを使用して入力から除外します。

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

-Denlarge_lex_buffers=<size>

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

latexディレクトリでmakeを実行すると、「TeX capacity exceeded」というメッセージが表示されます。どうすればよいですか?

texmf.cfgファイルを編集して、各種バッファのデフォルト値を増やし、「texconfig init」を実行します。

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

Doxygenは、BUILTIN_STL_SUPPORT オプションがオンになっていない限り、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。ただし、これには少し時間がかかる場合があります。

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