【问题标题】:Doxygen: hiding private/protected method...and tips [closed]Doxygen:隐藏私有/受保护的方法......和提示[关闭]
【发布时间】:2010-10-08 10:41:39
【问题描述】:
我正在使用 Doxygen 为我们的 API 生成文档,用 C# 编写。但是,它公开了私有/受保护的成员。有没有办法隐藏这些?
我想出了如何隐藏文件:EXCLUDE = 文件名列表
然而,我需要更多的粒度,从而保护用户免受不必要的 API 干扰。一个示例 Doxygen 文件以及提示/技巧将不胜感激。
您使用什么工具从源代码生成 API?
当我在 C# 中通过 C++ 使用 Doxygen 时,我感觉有点留在 18 世纪。
【问题讨论】:
-
如果 doxygen 只是为了生成一个好的 API 文档,我会改用 Sandcastle/SHFB 或 DocFX。大约十年前,当我考虑将 doxygen 用于 C# 时,我没有看到它适应新语言特性的速度不如我们在生产代码中适应它们的速度快,所以我们选择了 Sandcastle。
标签:
c#
documentation
doxygen
【解决方案1】:
我不知道 Doxygen 对 C# 的支持程度如何。
为了隐藏私有成员,你改变Doxyfile配置文件如下:
EXTRACT_PRIVATE = YES
可以为各种提取/隐藏代码元素设置许多其他选项,例如,引用Doxyfile 本身:
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
# documentation are documented, even if no documentation was available.
# Private class members and static file members will be hidden unless
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
EXTRACT_ALL = YES
# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
# will be included in the documentation.
EXTRACT_PRIVATE = YES
# If the EXTRACT_STATIC tag is set to YES all static members of a file
# will be included in the documentation.
EXTRACT_STATIC = YES
# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
# defined locally in source files will be included in the documentation.
# If set to NO only classes defined in header files are included.
EXTRACT_LOCAL_CLASSES = YES
# This flag is only useful for Objective-C code. When set to YES local
# methods, which are defined in the implementation section but not in
# the interface are included in the documentation.
# If set to NO (the default) only methods in the interface are included.
EXTRACT_LOCAL_METHODS = YES
# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base
# name of the file that contains the anonymous namespace. By default
# anonymous namespace are hidden.
EXTRACT_ANON_NSPACES = NO
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
# undocumented members of documented classes, files or namespaces.
# If set to NO (the default) these members will be included in the
# various overviews, but no documentation section is generated.
# This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy.
# If set to NO (the default) these classes will be included in the various
# overviews. This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
# friend (class|struct|union) declarations.
# If set to NO (the default) these declarations will be included in the
# documentation.
HIDE_FRIEND_COMPOUNDS = NO
【解决方案2】:
查看 doxygen 的 @cond 标志。在 C# 中,我隐藏了一些密码加密成员,如下所示:
//! @cond
private const String ENCRYPTEDFLAG = "xxxENCFLAGxxx";
private const String SEED = "hi_i_r_@_seed";
//! @endcond
doxygen 文档会让您相信您需要为 doxygen 定义并在 @cond 行上使用的条件符号,但这对我不起作用。这个方法做到了。
【解决方案3】:
这对我有用,可以隐藏大量代码和文档:
/*! \cond PRIVATE */
<here goes private documented source code>
/*! \endcond */
使用ENABLED_SECTIONS = PRIVATE 运行以创建文档的内部版本。您可以有多个条件并根据受众启用/禁用它们。
要仅隐藏文档块的一部分,请使用 \internal(除非找到 \endinternal,否则将隐藏到块的末尾)
注意:如果您喜欢 @ 表示法而不是反斜杠,则可以使用它。
【解决方案4】:
几种可能性,来自doxygen manual:
HIDE_UNDOC_MEMBERS, HIDE_UNDOC_CLASSES:显然只有当你只记录公共成员时才有效。
INTERNAL_DOCS:允许您使用 \internal 标记将 cmets 从文档的“公共”版本中排除。
ENABLED_SECTIONS:是INTERNAL_DOCS的更通用版本