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