Doxygen latest release v1.5.9 - last update 14 Feb 2011

よくある質問

  1. index ページの情報を 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...
     */
    

  2. クラス・ファイル・名前空間のメンバーの一部または全部が ドキュメント付けされていませんが?

    次のことをチェックしてください。:

    1. クラス・ファイル・名前空間がドキュメント付けされていますか? でなければ、設定ファイルで EXTRACT_ALLYES でなければ ソースから抽出されません。
    2. メンバーは private ですか? であれば、 EXTRACT_PRIVATE to YES にすれば ドキュメントに出力されます。
    3. セミコロン(MY_MACRO()のような)で終了していない関数マクロがクラスに ありませんか? あれば、doxygenのプリプロセッサにそれを削除するよう指示 してください。

      それはつまり設定ファイルで次のような設定をすることになります。

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

      詳しいことは、マニュアルのプリプロセスのセクションを読んでください。

  3. EXTRACT_ALL を NO にしたら、関数がドキュメントに出力されていません。 グローバルな関数や、変数、列挙型、型定義、defineを出力するには、 これらコマンドがあるファイルをドキュメント付けする必要があります。 それには、\file(か@file)コマンドをコメントブロックに指定してください。

    または、\ingroup コマンドを使ってメンバーすべてをグループ(またはモジュール)に 入れて、\defgroup コマンドを含むコメントブロックを使ってグループを ドキュメント付けする方法もあります。

    メンバー関数や、名前空間の一部となっている関数の場合は、クラス、名前空間を ドキュメント付けしてください。

  4. コードの断片を無視させるにはどうすればよいですか? 今最も簡単な方法は、 \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
    

    ブロック全体がPREPROCESSING = YESである限り、スキップされます。

  5. クラスのドキュメントで #include の後にくるものを 代えるにはどうすればよいですか?

    パスの一部をユーザ定義で除去するには、 STRIP_FROM_INC_PATH を使うのが常套手段です。

    次のようにクラスをドキュメント付けする方法もあります。

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

    こうすれば、

    #include <path/include.h> が、クラスMyClassName の定義を含む実際のヘッダファイル名に関わらず、 そのドキュメントに出力されます。

    角括弧の代わりに引用符を使ってインクルードファイルをインクルードすべき ことを示すには、次のようにします。

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

  6. 圧縮 HTML との組み合わせでタグファイルを使うにはどうすればよいですか?

    たとえば、HTML 圧縮ファイル a.chm から別の HTML 圧縮ファイル b.chm を参照するには、b.chm 内のリンクは次の形式になっていなければなりません。

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

    しかし、残念ながら両方の圧縮ファイルが同じディレクトリにないと働きません。

    従って、すべてのプロジェクトについて、生成される index.chm ファイルを ユニークな名前に変更し、 .chm ファイルすべてをひとつのディレクトリに 収めなければなりません。

    たとえば、a というプロジェクトがあって、プロジェクト b へはタグファイル b.tag を使って参照するとします。この場合、a プロジェクトのindex.chma.chm に変更し、b プロジェクトの index.chmb.chm に変更します。 a プロジェクトの設定ファイルでは、次のように書きます。

    TAGFILES = b.tag=b.chm::
    

    または、installbox を使って次のようにリンクをはる方法もあります。

    installdox -lb.tag@b.chm::
    

  7. HTML ページの上に置かれるクイックインデックスがいやです DISABLE_INDEX を YES にすればインデックスを無効にできます。 そうすれば独自のヘッダを書くことでヘッダファイルを置き、それをHTML_HEADER に 渡すことができます。

  8. 独自の html ヘッダファイルを使いたいだけなのに、HTML 出力全体が 変わってしまうのですが

    doxygen が生成する doxygen.css というスタイルシートをインクルード し忘れたのでしょう。HTML ページの HEAD セクションで次のように指定してください。

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

  9. なぜ doxygen は Qt を使うのですか?

    最大の理由は、殆どの Unix, Windows プラットフォームにも通用する 抽象クラスとして、 QFile, QFileInfo, QDir, QDate, QTime and QIODevice が定義されているからです。 もうひとつは、堅牢でバグのないユーティリティクラスとして、 QList, QDict, QString, QArray, QTextStream, QRegExp, QXML などがあるからです。

    GUI フロントエンドのdoxywizard は Qt を使っています。

  10. 対象ディレクトリにある test というディレクトリを除外するには どうすればよいですか?

    設定ファイルで次のように入力してください。

    EXCLUDE_PATTERNS = */test/*
    

  11. テキストの中にクラス MyClass へのリンクが生成されてしまいます。 阻止するにはどうすればよいですか?

    クラス名の前に % を %MyClass にように置いてください。すると % は削除され ワードはリンクされません。

  12. X プログラミングが好みです。それでも doxygen は使えますか?

    いいえ、doxygen はリードして対象の構造を解釈する必要があります。 時間を厭わないようでしたら、幾つかオプションはあります。

    • X の文法が C や C++ に近いなら、src/scanner.l を少し調節するのは それほど難しくないかもしれません。doxygen が直接サポートする他の言語 (Java, IDL, C#, PHP) についてもこれは実施されています。
    • X の文法が違うようであれば、C や C++ に近づけるために X を翻訳する 入力フィルタを書いて、doxygen に解釈させることはできるでしょう (この方法は VB, オブジェクトパスカル、Javascript でもとられています http://www.stack.nl/~dimitri/doxygen/download.html#helpers を参照してください。)
    • X の文法がまったく違う場合は、X パーサを書いて、src/scanner.l のように シンタックスツリーを作るバックエンドを書くこともできるでしょう。 (タグファイルを読む src/tagreader.cpp によっても)

  13. わけのわからないメッセージがでました。"input buffer overflow, can't enlarge buffer because scanner uses REJECT"

    doxygen の語いスキャナのルールとして、一度に256K 以上の入力文字にマッチする 場合に起こります。 この現象は非常に大きな生成ファイル(>256K 行)で見たことがあります。組み込みの プリプロセッサはこれを空ファイル(>256K の改行つきで)に変換しました。 他に、コードに256K 文字の行がある場合にも起こりえます。

    もしこのような現象が起こって、解消したい場合は、メッセージを引き起こしたコードの断片を こちらへ送ってください。問題を回避するには、ファイルにいくつか改行を入れて 分割したり、EXCLUDE を使って入力からはずすなどしてください。

  14. latex dir で make を動かすと、"TeX capacity exceeded"というメッセージが 出ました。

    texmf.cfg ファイルを編集してさまざまなバッファのデフォルト値を増やして、 "texconfig init" を実行することが可能です。

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

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

  16. PHP5とWindowsで検索エンジンにトラブルが起こります。

    こちらでヒントを探してください。

  17. コマンドラインからdoxygen設定を定義できますか?

    いいえ、コマンドラインからはできません。しかし stdin から読む ことはできるので、パイプすれば可能です。次に、設定ファイルのオプションを コマンドラインからオーバーライドする例を示します(unix 環境を想定しています)

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

    同じ名前でいくつもオプションを指定した場合は、doxygen は最後の指定を使います。 既定のオプションに追加するには、+= 演算子を使ってください。

  18. doxygen という名の由来は?

    documentation と generator から来ています。

    documentation -> docs -> dox
    generator -> gen
    

    lex と yacc に没頭していた頃、多くが "yy" で始まっていることから、 "y" がスリップインしてきて発音しやすくなりました (Docs-ee-gen と長い "e" が付くのがいい発音です)

  19. doxygen を開発した理由は?

    昔 Qt ライブラリベースのGUI ウィジェットを書いたことがあります (今もhttp://qdbttabular.sourceforge.net/ で公開しており、Sven Meyerが メンテナンスしています。)

    Qt は綺麗なドキュメントを生成してくれましたが、 公開されていない内部ツールが使われていたので、自分で似たものを書いてみました。 Doc++を覗きましたが、充分とはいえませんでした(シグナルもスロットもサポート無しで、 Qt のような好みの見栄えは得られませんでした)。それで独自のツールを書き始めたのです。

のセクションに行く / インデックス に戻る

This page was last modified on 14 Feb 2011.
© 1997-2010 Dimitri van Heesch, first release 27 oct 1997.
© 2001 OKA Toshiyuki (Japanese translation).
© 2006-2011 TSUJI Takahiro (Japanese translation).
© 2006-2011 TAKAGI Nobuhisa (Japanese translation).