【问题标题】:Is it possible for Doxygen to exclude undocumented functions from generated XML?Doxygen 是否可以从生成的 XML 中排除未记录的函数?
【发布时间】:2016-08-27 01:21:59
【问题描述】:

我只想为具有 Doxygen cmets 的代码生成文档。我通过 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,我希望只有bar 的文档会包含在生成的XML 中。不幸的是,生成了这两个函数的文档。是否可以仅为具有 Doxygen cmets 的代码生成文档?或者 Doxygen 是否总是将所有内容都包含在 XML 输出中而不管设置如何?

【问题讨论】:

    标签: doxygen


    【解决方案1】:

    在进一步阅读之前,请确保将 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); 
    

    注意,在他们的文档中,您必须设置一个 PREDEFINED 宏,但至少在我的 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
    

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

    【讨论】:

      【解决方案2】:

      您可以使用\cond 对 Doxygen 隐藏部分源代码。这避免了使用 Harry's answer 中的预处理器的需要。

      例如,这里的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,这两个函数都将显示在文档中。留下其中一个标签将隐藏相应的功能。

      【讨论】:

        猜你喜欢
        • 2011-08-07
        • 2014-07-22
        • 1970-01-01
        • 2018-06-19
        • 1970-01-01
        • 2011-11-11
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        相关资源
        最近更新 更多