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

C 包括一个头文件,用于使用Doxygen预处理器解析所有其他文件,c,c-preprocessor,header-files,doxygen,C,C Preprocessor,Header Files,Doxygen,我想从h文件中包含#defines,以便使用Doxygen解析所有其他文件 项目背景: 我的C项目在它的build命令中包含一个头文件config.h 它还定义了同一构建命令上的目标MODEL_a config.h根据正在构建的目标创建定义(与MODEL_A的定义列表不同,对于MODEL_B): 我的强氧问题: 我尝试使用Doxygen生成文档。我在Doxyfile中有: # including of config.h to INPUT seems necessary. INPUT = ./

我想从
h
文件中包含
#define
s,以便使用Doxygen解析所有其他文件


项目背景:

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

它还定义了同一构建命令上的目标
MODEL_a

config.h
根据正在构建的目标创建定义(与
MODEL_A
的定义列表不同,对于
MODEL_B
):


我的强氧问题:

我尝试使用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
依赖于defines
的代码没有包含在文档中,就像预处理器没有在
config.h
中获得定义一样


我目前的发现:

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

  • 首先解析了
    /source/config.h
    ,并根据
    模型A
    正确解析(我可以在预处理器输出中看到正确的
    #定义
    #define在预处理器输出中具有_功能_1
  • 依赖于
    C文件的预处理具有\u功能\u 1
    就好像它没有定义一样
在Doxyfile的预定义字段
中定义
具有功能\u 1
。这不是一个实用的解决方案,但仍然很有趣



当预处理器处理所有后续的C文件时,如何确保首先从
config.h
中预处理的
#define
行保持定义状态?

显示C代码本身可能对您有益。通常,Doxygen运行一个标准的预处理器-即,呈现的代码应该与编译器预处理的代码相同。为了实现代码中的
#define HAS_功能_1
,必须对其进行定义。 我从您不愿意将它添加到doxygen配置中理解到,它是在项目的其他地方(或者可能是Makefile)定义的,这就是为什么实际代码的行为就像它是定义的一样。
如果是这样的话,除了更多的预处理器技巧或只是将其添加到doxygen配置文件中之外,我看不到任何可行的解决方法。

我遇到了一个非常类似的问题

我的标题与我的源文件位于不同的目录中,例如:

doxy_input_dir/
    |
    + src/
    |
    + inc/
我将
递归
输入文件选项设置为YES。我假设预处理器会正确地找到我的标题。但是,当我通过运行
doxygen-defined
查看预处理器输出时,我看到了很多
#include foo.h:未找到!正在跳过…


解决方案是使用
INCLUDE\u PATH
标记显式指定所有标题目录。

它是autotools项目吗?如果包含
config.h
通常是有条件的:#如果包含#如果包含#如果包含#如果包含#那么必须设置
预定义=包含#配置(h
)。我为代码生成了一些文档,这些代码根据libxml2的可用性有条件地定义了两个函数,修改了预定义的文档后,生成了文档。Doxygen 1.8.8-5.你找到答案了吗?我正处于完全相同的情况,在浏览了网络上的各种帖子之后,我现在失去了希望。
doxy_input_dir/
    |
    + src/
    |
    + inc/