我想包含文件中的#define
sh
以使用 Doxygen 解析所有其他文件。
项目背景:
我的 C 项目包含一个头文件config.h
,它是构建命令。
它还MODEL_A
在同一构建命令上定义了一个目标。
config.h
根据正在构建的目标创建定义(与 for 的定义列表不同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