Doxygen无法扩展AUTOSAR宏

问题描述

我正在使用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,DATA_LOCATION)  var_2;
typedef P2VAR( uint8,DATA_LOCATION)  var_3;

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

xml输出中的

示例:

enter image description here

任何人都曾经见过并能够解决此问题吗?

解决方法

以防我使用您的代码:


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


typedef P2VAR( uint8,AUTOMATIC,DATA_LOCATION)  var_1;
typedef P2VAR( uint8,DATA_LOCATION)  var_2;
typedef P2VAR( uint8,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配置中添加宏:

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