Doxygen 无法扩展 AUTOSAR 宏

Doxygen can't expand AUTOSAR macros

我正在使用 Doxygen v1.8.9.1 分析 AUTOSAR C 代码。 AUTOSAR 代码有一些宏来定义变量和函数。像这样:

#define P2VAR(ptrtype, memclass, ptrclass)  ptrtype *

我尝试更改以下配置:

ENABLE_PREPROCESSING
MACRO_EXPANSION     
EXPAND_ONLY_PREDEF  
EXPAND_AS_DEFINED   
SKIP_FUNCTION_MACROS

而且无论我做什么,它都无法识别使用这些宏定义的函数和变量。相反,它会看到多个具有相同名称的函数。

例如: 如果我有以下代码:

typedef P2VAR( uint8, AUTOMATIC, DATA_LOCATION)  var_1;
typedef P2VAR( uint8, AUTOMATIC, DATA_LOCATION)  var_2;
typedef P2VAR( uint8, AUTOMATIC, DATA_LOCATION)  var_3;

它不会看到 3 个类型为 uint8 的变量名称 var_1、var_2、var_3 但它看到 3 个同名函数 P2VAR

来自 xml 输出的示例:

有人以前见过这个问题并且能够修复它吗?

如果我使用你的代码:


#define P2VAR(ptrtype, memclass, ptrclass)  ptrtype *


typedef P2VAR( uint8, AUTOMATIC, DATA_LOCATION)  var_1;
typedef P2VAR( uint8, AUTOMATIC, DATA_LOCATION)  var_2;
typedef P2VAR( uint8, AUTOMATIC, DATA_LOCATION)  var_3;

作为 doxygen 配置文件:

QUIET=YES
EXTRACT_ALL=YES
ENABLE_PREPROCESSING=YES
MACRO_EXPANSION  =YES
EXPAND_AS_DEFINED=YES
GENERATE_XML=YES

我只在定义部分看到 P2VAR 一次,在索引部分看到一次(当然还有代码部分)。 我在 doxygen 版本 1.8.20 以及版本 1.8.9.1

的情况下看到了这一点

当我尝试一个简单的代码时,它工作正常,就像@albert 的回答中提到的那样,但它仍然无法在大型代码上工作。

对我有用的是在预定义配置中添加宏,如下所示:

PREDEFINED             = "FUNC(rettype,memclass)=rettype" \
                         "P2VAR(ptrtype,memclass,ptrclass)=ptrtype *" \
                         "VAR(type,memclass)=type"