【发布时间】:2013-03-10 19:08:05
【问题描述】:
我想包含 h 文件中的 #defines,以便使用 Doxygen 解析所有其他文件。
项目背景:
我的 C 项目包含一个头文件 config.h,它是构建命令。
它还在同一个构建命令上定义了一个目标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预处理器输出中的数字。 - 依赖于
HAS_FUNCTIONALITY_1的C 文件的预处理就像未定义一样。
在 Doxyfile 的 PREDEFINED 字段中定义 HAS_FUNCTIONALITY_1 可以按预期工作。这不是一个实用的解决方案,但仍然很有趣。
当预处理器处理所有后续 C 文件时,如何确保首先从 config.h 预处理的 #define 行保持定义?
【问题讨论】:
-
它是一个自动工具项目吗?如果包含
config.h通常是有条件的:#if HAVE_CONFIG_H #include#endif 所以必须设置 PREDEFINED = HAVE_CONFIG_H。我为代码生成了一些文档,这些文档根据 libxml2 的可用性有条件地定义了两个函数,并且在修改 PREDEFINED 之后生成了文档。 Doxygen 1.8.8-5. -
您找到答案了吗?在查看网络上的各种线程后,我处于完全相同的情况并且目前正在失去希望。
标签: c c-preprocessor header-files doxygen