【问题标题】:Doxygen Doesn't expand macrosDoxygen 不扩展宏
【发布时间】:2014-02-24 09:23:12
【问题描述】:

这似乎是一项非常微不足道的任务,但我无法让 Doxygen 扩展宏。我使用了 1.6.3、1.7.4、1.7.6 和 1.8.6 版本。我也在谷歌上做了很多搜索,但仍然失败得很惨。

我有一个 c++ 文件,其中只包含以下几行(复制 Doxygen 文档):

#define CONST_STRING const char *
 static CONST_STRING version = "2.xx";

我已按照文档进行设置:

ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES

然后添加以下内容:

EXPAND_ONLY_PREDEF     = YES
EXPAND_AS_DEFINED      = CONST_STRING 

然后

SKIP_FUNCTION_MACROS   = YES (previously NO)

我从代码生成中得到的只是:

1 #define CONST_STRING const char *
2 static CONST_STRING version = "2.xx";

我做错了什么?任何建议表示赞赏。

【问题讨论】:

  • @CaptainObvlious - 该用户直接从 doxygen 页面中获取示例来制作 MWE。
  • 应该说清楚的。这不是关于 C++ 语法/语义的问题。这是关于 Doxygen 预处理源代码和扩展宏,例如上面给出的那些。因此,#define 是一个非常有效的示例。
  • 是什么让你觉得你出了问题,user3257895?

标签: c++ macros doxygen


【解决方案1】:

是什么让你觉得你做错了什么?

您应该会在该源文件的文档页面的“变量”部分看到version。如果您启用了源代码输出,变量 version 应该超链接到该变量文档。

如果您在变量定义前加上 doxygen 注释,您的文档会看起来更好。继续这个例子,

//! Define a constant string type.
//! @deprecated Use the typedef const_string_t instead.
#define CONST_STRING const char *

//! Software version number
static CONST_STRING version = "2.xx";

【讨论】:

  • 抱歉,如果我使用错误的方法回答了您的问题。这是我第一次使用 Stackoverflow。从示例中,我期望 doxygen 生成的代码为:static const char * version = "2.xx";,即 CONST_STRING 被替换为“const char *”。我想这就是 MACRO_EXPANSION 的意思……
  • 这不是 MACRO_EXPANSION 的意思。显示的代码是您的代码,可能删除了 doxygen cmets。启用 MACRO_EXPANSION 的作用是告诉 doxygen 的解释器在解析之前预处理您的代码。将 doxygen 视为编译器,但输出是 API 文档而不是机器代码。 doxygen 的前端非常非常类似于编译器的前端。
  • 感谢大卫,经过您的解释,我回去重新阅读了文档。你是对的,我误解了描述。我的误解主要是由于 Doxygen 没有为变量生成文档,尽管上面描述了所有正确的设置,包括启用了源代码输出。这是因为 EXTRACT_ALL 也需要设置为 YES。非常感谢您的回答!
猜你喜欢
  • 2021-07-17
  • 2021-09-14
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多