重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Doxygenの#includeプリプロセスについて質問があります。

あるCソースファイル内に、記述「#include"foo.h"」があったとします。Cコンパイラはサーチパスにもとづいて、ファイル「foo.h」を探して貼り付ける様に展開してくれます。ここで、Doxygenも同じように、自動的にファイルを検索して展開してくれるのでしょうか?とりあえず、自動的にしてくれるに違いないと思っているのですが・・・。希望の結果が得られません。下記のようなファイルを用意してみました。

----- doxygen.config ここから -----
WARN_LOGFILE = doxygen.log
OPTIMIZE_OUTPUT_FOR_C = YES
EXTRACT_ALL = YES
INPUT = src1.c src2.h
SEARCH_INCLUDES = YES
INCLUDE_PATH = .
INCLUDE_FILE_PATTERNS = *.h
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
----- src1.c ここから -----
#include "src2.h"
#include "src3.h"
int a, b;
int main(void) {
int a, b, c;
a = add( 1, 2 );
b = sub( 4, 5 );
}
----- src2.h ここから -----
int add( int a, int b ) {
return( a + b );
}
----- src3.h ここから -----
int sub( int a, int b ) {
return( a - b );
}
----- ここまで -----

上記ファイルをカレントディレクトリに置き、コマンド「doxygen doxygen.config」を実行しています。出来上がったファイル「html/index.html」から、タブ「Files->Globals->Functions」と開いてみると、add()はあってもsub()は見当たりません。add()は意図的にINPUTの項目に入れているので難なく盛り込まれます。sub()が自動的に入ってくれないかと期待しましたが、src3.h内のsub()は盛り込まれなかったようです。また、doxygen.logには何も書き込まれていません。

予想と質問みたいなのを書いてみました。

(1) 私の思い違いですよ・・・?
(doxygenは#includeでファイルのコード展開まではしてくれない。
コードはINPUTに明示的に入れなさい。そもそも、ヘッダファイルに
ファンクションの実体を書くのがいかん。)
(2) Configファイルに書き間違いがあるよ・・・
うまくできるパラメータ記述がありましたら、教えてください。
(3) その他解決策やご意見がございましたら、教えてください。

環境
(1) Celelon, Windows XP SP2, コマンドプロンプト, doxygen 1.5.4
(2) x86_64, Readhat Linux 2.6.9, doxygen 1.3.9.1

Windows,Linuxともに同じ結果となりました。
考え違いがあるかもしれませんが、ご助力願えたらと思っています。
よろしくお願いいたします。 m(_ _)m
 Magna

A 回答 (2件)

記憶に頼っての回答なので不確かですが...



INCLUDE_PATHを設定すればプロプロセス時の検索対象にはなりますが、入力ファイルではないので展開はされません。展開する必要があるならINPUTで指定する必要があります。

参考URL:http://www.doxygen.jp/config.html#cfg_include_path
    • good
    • 0
この回答へのお礼

jactaさん

有用なページを教えてくださってありがとうございます。下記の一文は、そのまんまですね。自力で見つけるべき場所です・・・スイマセン(汗)。

http://www.doxygen.jp/config.html#cfg_include_path
> INCLUDE_PATH
>  INCLUDE_PATH タグを使用して、1つまたはそれ以上のディレクトリ ―
>  入力ファイルにはならないけれども、 プリプロセッサによって処理さ
>  れるべきインクルードファイルを含むディレクトリ ― を指定するこ
>  とができます。

jactaさん worte:
> 展開する必要があるならINPUTで指定する必要があります。

入力ファイルにならない・・・つまり、Cコンパイラのようなプリプロセス処理をおこなってくれるわけじゃなさそうですよねぇ。残念。結論として、ご助言のとおり、ヘッダファイルに記述された内容もドキュメントにしっかり反映させたいならば、INPUTなど一連のルールにマッチさせる必要がある。入力ファイルとして認識させなければ成らない。となるようです。

本当に、ありがとうございました。

お礼日時:2008/01/24 18:24

INPUTにファイル名を書くのではなく、ディレクトリを書けば、その中のファイルが対象になったはずです。

この回答への補足

jactaさん
早速の回答ありがとうございます。一つの回避案になります。

INPUTにディレクトリを記述して、RECURSIVE,FILE_PATTERNやEXCLUDE_***などのルールをうまく設定することで、所望のファイルを一気に読み込めるようにできますね。多数のファイルを扱う時など、とても有効な手段だと思います。これは言い換えれば、INPUTにすべてのファイルを明示的に記述することと同等かなぁと思っています。

読み込むファイルは、INPUTやFILE_PATTERNなどで明示的に与えなければならない。ルールにマッチさせ読み込ませるという手法をとらないといけないという事でしょうか。コンフィグファイルのSEARCH_INCLUDE、INCLUDE_PATHやENABLE_PREPROCESSINGのコメントを読んで、#incude"foo.h"をCコンパイラのように指定パスから探して展開してくれる・・・と期待して実験しております。ご存知ないですか?

Magna wrote:
> (1) 私の思い違いですよ・・・?
> (doxygenは#includeでファイルのコード展開まではしてくれない。
(後略)

やはり、doxygenはソースファイル内に記述された#includeのファイルを、INCLUDE_PATHから探し出し、展開するなんてことはしてくれないのかなぁ・・・私の理解が足りない点がありましたら、ぜひ、ご教授ください。

お返事、とても助かります(^^)。
もうすこしがんばってみます。

 Magna

補足日時:2008/01/24 16:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!