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
,这两个函数都会出现在文档中。省略其中一个标签将隐藏相应的功能。
我只想为包含 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
,这两个函数都会出现在文档中。省略其中一个标签将隐藏相应的功能。