Doxygen 是否可以从生成的 XML 中排除未记录的函数?

Is it possible for Doxygen to exclude undocumented functions from generated XML?

我只想为包含 Doxygen 注释的代码生成文档。我通过 Doxygen 版本 1.8.9.1 创建了一个 Doxyfile 并将其配置为仅输出 XML 并隐藏所有未记录的代码:

GENERATE_HTML          = NO
GENERATE_LATEX         = NO
GENERATE_XML           = YES
HIDE_UNDOC_MEMBERS     = YES
HIDE_UNDOC_CLASSES     = YES

之后,我创建了一个简单的 C 头文件 test.h,其中包含一个已记录的函数声明和一个未记录的函数声明:

void foo(int a);

/**
 * "bar" function description
 * @param b sample param
 */
void bar(int b);

通过执行 doxygen,我希望在结果 XML 中只包含 bar 的文档。不幸的是,生成了这两个函数的文档。是否可以仅为具有 Doxygen 注释的代码生成文档?或者无论设置如何,Doxygen 总是会在 XML 输出中包含所有内容吗?

在进一步阅读之前,确保 EXTRACT_ALL 设置为 NO

我不喜欢以下解决方案,但它确实有效。使用 doxygen 的预处理器

#ifdef PROJECT_NO_DOC
void foo(int a); 
#endif /* PROJECT_NO_DOC */

/**
 *  * "bar" function description
 *   * @param b sample param
 *    */
void bar(int b); 

请注意,在他们的文档中,您必须设置一个预定义宏,但至少在我的 doxygen 版本中,这不是必需的。他们的文档指定这样做 set a predefined macro in the config to do it for you

#ifndef DOXYGEN_SHOULD_SKIP_THIS

 /* code that must be skipped by Doxygen */

#endif /* DOXYGEN_SHOULD_SKIP_THIS */

在应该隐藏和放置的方块周围:

PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS

在配置文件中,doxygen 应该跳过所有块,只要

ENABLE_PREPROCESSING = YES

还有其他方法,但它们有额外的限制,即要确保没有静态方法出现在您的 public 文档中,您可以将 EXTRACT_STATIC 设置为 NO

您可以使用 \cond to hide parts of the source code from Doxygen. This avoids the need to use the preprocessor as in .

例如,此处 foo 不会被 Doxygen 看到,因此不会记录在案:

/** \cond */
void foo(int a);
/** \endcond */

/**
 * "bar" function description
 * @param b sample param
 */
void bar(int b);

此外,可以将节标签添加到 \cond,并通过在 ENABLED_SECTIONS 配置选项中列出它们来控制包含哪些节。

例如:

/// \cond CLASS_A
/// This function foos `a`.
void foo(int a);
/// \endcond

/// \cond CLASS_B
/// This function bars `b`.
void bar(int b);
/// \endcond

通过设置ENABLED_SECTIONS = CLASS_A CLASS_B,这两个函数都会出现在文档中。省略其中一个标签将隐藏相应的功能。