包含一个头文件,用于使用Doxygen预处理器解析所有其他文件

Gau*_*ier 5 c doxygen header-files c-preprocessor

我想#defineh文件中包含s 来解析Doxygen的所有其他文件.


项目背景:

我的C项目包含一个头文件config.h,它是build命令.

它还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 
Run Code Online (Sandbox Code Playgroud)

我对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
Run Code Online (Sandbox Code Playgroud)

依赖于定义的代码HAS_FUNCTIONALITY_x未包含在文档中,就好像预处理器没有获得定义一样config.h.


到目前为止我的发现:

我在帮助下检查了预处理器输出doxygen -d Preprocessor,并且可以看到:

  • ./source/config.h首先解析,并正确根据MODEL_A(我可以#defines在预处理器输出中看到正确).#define HAS_FUNCTIONALITY_1预处理器输出中的数字.
  • C文件的预处理依赖于HAS_FUNCTIONALITY_1act,就像它没有被定义一样.

HAS_FUNCTIONALITY_1PREDEFINEDDoxyfile 的字段中定义按预期工作.这不是一个实用的解决方案,但仍然很有趣.


当预处理器在所有后续C文件上工作时,如何确保#define首先预处理的行config.h保持定义?

lev*_*gli 0

展示 C 代码本身可能会对您有所帮助。一般来说,Doxygen 运行一个标准的预处理器 - 即渲染的代码应该与编译器预处理的代码相同。为了实现#define HAS_FUNCTIONALITY_1代码中的等效功能 - 必须对其进行定义。我从您不愿意将其添加到 doxygen 配置中了解到,它是在项目的其他地方(或者可能是 Makefile)定义的,这就是实际代码的行为就好像它被定义一样的原因。如果是这种情况,除了更多的预处理器技巧或简单地将其添加到 doxygen 配置文件中之外,我没有看到其他可行的解决方法。