Doxygen(或其他工具)文档类和名称空间(如果处于同一级别)类似

Doxygen(或其他工具)文档类和名称空间(如果处于同一级别)类似,doxygen,python-sphinx,Doxygen,Python Sphinx,我有一堆名称空间(包含自由函数)和类(显然包含成员函数),每个名称空间的顶层都有一个Doxygen注释,其成员也有一些Doxygen注释。它们位于顶级名称空间(一个用于整个项目)和辅助名称空间(用于将项目分解为包)中。像这样: namespace proj { namespace pkg1 { /// @brief The Doxygen comment goes here. #ifdef DOXYGEN class #else namespace #endif Baz { proj/pk

我有一堆名称空间(包含自由函数)和类(显然包含成员函数),每个名称空间的顶层都有一个Doxygen注释,其成员也有一些Doxygen注释。它们位于顶级名称空间(一个用于整个项目)和辅助名称空间(用于将项目分解为包)中。像这样:

namespace proj {
namespace pkg1 {

/// @brief The Doxygen comment goes here.
#ifdef DOXYGEN
class
#else
namespace
#endif
Baz {
  • proj/pkg1/foo.hpp
    class proj::pkg1::foo
  • proj/pkg1/bar.hpp
    class proj::pkg1::bar
  • proj/pkg1/baz.hpp
    namespace proj::pkg1::baz
  • proj/pkg2/one.hpp
    class proj::pkg2::one
  • proj/pkg2/two.hpp
    namespace proj::pkg2::two
我没有任何
@文件
注释。它们是完全冗余的,因为每个组件已经有一个主注释,它附加到主类或名称空间

我试着通过Doxygen运行,结果是一团糟:

  • 名称空间和类被分为两个不同的层次结构,分别位于标题行和导航面板中。但我希望它们都放在一棵树中,因为例如,
    pkg2::One
    pkg2::Two
    一起
  • 名称空间的主要层次结构隐藏在导航面板的下面三层(项目名称->名称空间->名称空间列表)。它在“名称空间成员”的旁边-谁使用它
  • 文件(和目录)还有另一个层次结构。这是多余的,因为它们完全匹配名称空间(和类)的层次结构

  • 现在这有点离题了,但我还想向包名称空间添加注释。它们在分离类和名称空间(不是什么大问题)方面有着相同的问题,但也显示了各种自由函数,例如
    操作符,为了让事情顺利进行,这里有一个可能的解决方案:

    稍微改变一下期望值:不要希望两级结构一次呈现给读者,而是一次呈现一部分。让用户单击树中每个命名空间的单独页面:

    • proj
      命名空间的文档页面显示了它包含的所有包(即,在示例中,它显示了命名空间
      pkg1
      pkg2

    • 每个包名称空间页面显示其中的所有类和组件名称空间(在单独的列表中,这有点烦人,但至少每个包的所有内容都在一起)

    您可以使用
    GENERATE_TREEVIEW=NO
    隐藏树视图,并隐藏标题行
    DISABLE_INDEX=YES

    主页可以只是顶级
    proj
    命名空间页面的链接(主页的通常内容移动到
    proj
    详细描述),代码如下:

    /**
    @mainpage
    @ref proj "Click here for the proj documentation"
    */
    
    一个微小的变化是在主页面中手动列出包含如下代码的包,并绕过
    proj
    名称空间页面。对于没有总体顶级名称空间的项目,或者您希望对主页进行更好的控制的项目,这将非常有效

    /**
    @mainpage
    
    Packages:
    - @ref proj::pkg1 @n @copybrief proj::pkg1
    - @ref proj::pkg2 @n @copybrief proj::pkg2
    */
    

    这是一个特别可怕的黑客行为,但我要记录在案。您可以确定类最好由Doxygen处理,并将所有组件名称空间(第三级名称空间)重新标记为类。像这样:

    namespace proj {
    namespace pkg1 {
    
    /// @brief The Doxygen comment goes here.
    #ifdef DOXYGEN
    class
    #else
    namespace
    #endif
    Baz {
    
    然后在
    Doxyfile
    中设置
    PREDEFINED=DOXYGEN


    显然,这的缺点是,它在源代码中看起来很丑陋,在文档中显示为“类”令人困惑。

    您使用的是哪个版本的doxygen。您能否显示输出不符合预期的地方/小的完整示例。@albert是最新版本(1.8.15),但我认为最近没有任何相关变化(多年来我多次遇到相同的问题)。我已经完整地描述了一些示例文件,并且添加了输出内容的屏幕截图(这对于使用Doxygen的人来说并不奇怪)和我正在寻找的那种东西的模型(为我糟糕的PhotoShop技能道歉!)。不要把模型看得太字面,它不必看起来完全像那样。我只想合并类和名称空间,并去除一些垃圾。对于名称列表实体和类实体的合并,我没有直接的答案,但mybe分组(请参见
    \defgroup
    等)可能会给出一些结果。关于“文件”条目,请参见配置项
    LAYOUT\u FILE
    和命令
    doxygen-l…
    。关于带有“主页等”的行,请查看配置设置
    DISABLE\u INDEX
    @albert谢谢,使用组/模块是一个好主意。但据我所知,这将意味着在每个文件中编写大量样板文件Doxygen,或者编写一个脚本来自动生成样板文件。我认为从长远来看,这是很难理解/维持的。只是一个简短的鼓励说明这个问题引起了注意。我调查了一下,想提出一个解决办法,但遗憾的是找不到。将类和命名空间树合并在一起看起来会更好,这将是对doxygen工具的一个很好的改进(在我看来)。