doxygen没有正确解析宏



我正在使用doxygen 1.8.11和eclipse插件eclox。我试图为我的源文件生成调用图。当我签入其中一个文件时,我注意到调用图中包含一个函数调用,该函数调用实际上被#define禁用了,我的期望是在调用图中看不到这个函数调用。

在源文件的顶部:

#define MACRO_NAME   FALSE
....
void Func_1(int *p)
{
....
#if (MACRO_NAME == TRUE)
Func_Call_2()
#else
Func_Call_3()
#endif 
}

FALSE和TRUE定义在我包含在"包含路径"设置中的一个标题中,我还在html报告中获得了FALSE和TRUE的超链接,因此doxygen能够找到定义。

Func_Call_2和Func_Call_3()都绘制在调用图中,而实际上我只想看到Func_Call_4()。

我在doxyfile中的设置是:

Enable Preprocessing      YES
Macro Expansion           NO
Expand Only Predefined    NO
Search Includes           YES
Extract All               YES
Extract Static            YES

我也尝试过用Macro ExpansionYES,但后来我根本没有得到这个函数Func_1的调用图,只有在将其设置回no之后,调用图才会在html文件中再次绘制

定义了FALSE/TRUE的头文件开始如下:

#ifndef HEADER_H
#define HEADER_H
.....
#ifndef TRUE
#define TRUE   1
#endif
#ifndef FALSE
#define FALSE  0
#endif

还有其他设置我可以试试吗?这样doxygen就可以在没有禁用代码的情况下绘制调用图了?

您可以尝试以下建议之一:

  • MACRO_NAME的定义和条件中,不要直接使用TRUEFALSE,而是使用10
  • 不要为MACRO_NAME设置值,但要检查它是否已定义
  • 将"宏展开"设置为"是",将"仅预定义展开"设置成"是"。然后设置"预定义"和/或"按定义展开"以包括相关宏

最新更新