4

我将 Doxygen 用于我的 C++ 项目,该项目将托管在 github 中。

我想在自述文件中包含一个类的方法列表,我正在考虑自动化它的方法。

我将在 repo 中包含整个生成的 html 页面,但我认为通过在自述文件中包含主类的成员来提供 API 的想法会很好。

到目前为止,我找不到生成降价文件的方法。我的下一个想法是编写一些 shell 脚本,它会自动复制成员列表并将其包含在自述文件中,为此我需要单独生成一个类的成员函数列表。

是否可以将 doxygen 配置为单独输出一个类的成员列表?

4

2 回答 2

4

我最近有一个项目,我想确定几个函数作为公共 API 的一部分。我觉得没有必要将它们放在 README 文件中,所以我所做的并不是你真正想要的,但你可能会发现它是一个潜在的妥协。

我创建了一个组:

/**
\defgroup public_api Public API
\brief This is a list of the primary functions that comprise the
public API.

*/

然后我在主页上引用了它:

/**

\mainpage Some Project

...

See \ref public_api "Public API" for details on these functions.

*/

然后我明确地将每个公共 API 函数标记为属于该组。

/**
\brief Perform any necessary initialisation before processing.

\ingroup public_api

This function must be called prior to any of the other public
api functions to allow initialisation to be performed prior to use.


 */
void init();

最终结果是从主页链接到的单个页面上的功能列表。我知道这并不完全是您所追求的,但我有点喜欢 doxygen 将所有文档集中到一个易于浏览的地方。

如果您确实解决了您满意的问题,请发布。我一直对 doxygen 的非典型用途感兴趣。

于 2012-11-07T22:17:40.747 回答
1

您可以从 doxygen XML 输出中提取一个类的成员列表。在配置文件中设置GENERATE_XMLYES,生成如下所示的 xml 文件:

xml/classTest.xml

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.7.6.1">
<compounddef id="classTest" kind="class" prot="public">
<compoundname>Test</compoundname>

  <sectiondef kind="public-func">

      <memberdef kind="function" id="classTest_1a99f2bbfac6c95612322b0f10e607ebe5" 
         prot="public" static="no" const="no" 
         explicit="no" inline="no" virt="non-virtual">

         <type></type>
         <definition>Test::Test</definition>
         <argsstring>()</argsstring>
         <name>Test</name>
         <briefdescription>  </briefdescription>
         <detaileddescription>
               <para>A constructor. A more elaborate description of the constructor. </para>        
         </detaileddescription>
         <inbodydescription>  </inbodydescription>
        <location file="/home/davidl/SO/test.cpp" line="23"/>
      </memberdef>

  </sectiondef>
</compounddef>
</doxygen>
于 2012-11-04T19:22:34.177 回答