6

Doxygen を使用して他のすべてのファイルを解析するために、ファイル#defineの sを含めたいと考えています。h


プロジェクトの背景:

config.h私の C プロジェクトには、ビルド コマンドのヘッダー ファイルが含まれています。

またMODEL_A、同じビルド コマンドでターゲットを定義します。

config.hビルドされるターゲットに応じて定義を作成します ( の定義のリストとは異なりますMODEL_A) MODEL_B:

#if defined(MODEL_A)
#define HAS_FUNCTIONALITY_1
#define HAS_FUNCTIONALITY_2
#elif defined(MODEL_B)
#define HAS_FUNCTIONALITY_3
#define HAS_FUNCTIONALITY_4
#endif 

Doxygenに関する私の問題:

Doxygen でドキュメントを生成しようとしています。私はDoxyfileに持っています:

# including of config.h to INPUT seems necessary.
INPUT = ./source/config.h \
    ./source
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = NO
INCLUDE_PATH = ./source
INCLUDE_FILE_PATTERNS = ./source/config.h
PREDEFINED = MODEL_A

HAS_FUNCTIONALITY_xプリプロセッサが で定義を取得しなかったかのように、定義に依存するコードはドキュメントに含まれていませんconfig.h


これまでの私の発見:

の助けを借りてプリプロセッサの出力を調べたところ、次のdoxygen -d Preprocessorことがわかりました。

  • ./source/config.h最初に解析され、正しく(プリプロセッサの出力でMODEL_A正しいことがわかります)に従って正しく解析されました。プリプロセッサ出力の図。#defines#define HAS_FUNCTIONALITY_1
  • に依存するCファイルの前処理はHAS_FUNCTIONALITY_1、あたかも定義されていないかのように振る舞います。

DoxyfileHAS_FUNCTIONALITY_1のフィールドでの定義は期待どおりに機能します。PREDEFINEDこれは実用的な解決策ではありませんが、それでも興味深いものです。


プリプロセッサが後続のすべてのCファイルで動作するときに、#define最初に前処理された行が定義されたままであることを確認するにはどうすればよいですか?config.h

4

2 に答える 2

0

C コード自体を示すことは、おそらく有益でしょう。一般に、Doxygen は標準のプリプロセッサを実行します。つまり、レンダリングされたコードは、コンパイラが前処理した場合と同じになります。#define HAS_FUNCTIONALITY_1コード内で同等のものを実現するには、定義する必要があります。それを dox​​ygen 構成に追加するのをためらうあなたの意見から、それがプロジェクト (またはおそらく Makefile) の別の場所で定義されており、それが実際のコードが定義されているかのように動作する理由であると理解しています。これが事実である場合、プリプロセッサのトリックを増やすか、単に doxygen 構成ファイルに追加する以外に、もっともらしい回避策は見当たりません。

于 2013-06-08T08:39:43.890 に答える