• 2013年12月26日 星期四 doxygen入门--很好


    2013年12月26日 星期四 doxygen入门--很好 2013年12月26日 星期四 14:08:59     晴

    简介Doxygen

    一.什么是Doxygen?

    Doxygen 是一个程序的文件产生工具,可将程序中的特定批注转换成为说明文件。通常我们在写程序时,或多或少都会写上批注,但是对于其它人而言,要直接探索程序里的批注,与打捞铁达尼号同样的辛苦。大部分有用的批注都是属于针对函式,类别等等的说明。所以,如果能依据程序本身的结构,将批注经过处理重新整理成为一个纯粹的参考手册,对于后面利用您的程序代码的人而言将会减少许多的负担。不过,反过来说,整理文件的工作对于您来说,就是沉重的负担。
    Doxygen
    就是在您写批注时,稍微按照一些它所制订的规则。接着,他就可以帮您产生出漂亮的文档了。

    因此,Doxygen 的使用可分为两大部分。首先是特定格式的批注撰写,第二便是利用Doxygen的工具来产生文档

    目前Doxygen可处理的程序语言包含:

    • C/C++
    • Java
    • IDL (Corba, MicrosoftKDE-DCOP类型)  

    而可产生出来的文档格式有:

    • HTML
    • XML
    • LaTeX
    • RTF
    • Unix Man Page

    而其中还可衍生出不少其它格式。HTML可以打包成CHM格式,而LaTeX可以透过一些工具产生出PS或是PDF文档。

     

    二.安装Doxygen

    • 1.1 安装 Doxygen 1.7.4(Windows)
    • 1.2 安装 graphviz 2.28.0(Windows)

    graphviz 是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形Doxygen 使用 graphviz 自动生成类之间和文件之间的调用关系图,如不需要此功能可不安装该工具包。

    • 1.3 安装 Windows Help Workshop 1.32

    Doxygen 使用这个工具可以生成 CHM 格式的文档。

    三.Doxygen的配置

    Doxygen 产生文档可以分为三个步骤。一是在程序代码中加上符合Doxygen所定义批注格式。二是使用Doxywizard进行配置。三是使用Doxygen来产生批注文档。
    Doxygen1.7.4 主界面如下图 1 所示。

     说明:1Doxygen 工作目录,就是用来存放配置文件的目录。

           2,递归搜索源文件目录需要选上。

    选择wizard 标签下的 Output Topics

    相关配置说明如下图 2 所示。

     选择 wizard 标签下的 Diagrams Topics

    相关配置说明如下图 3 所示。

    说明:如果选择这个选项之前需要先安装了Graphviz 工具包。

    选择 expert标签下的 Project Topics

    相关配置说明如下图 4 所示。

    说明:编码格式,UTF-8 是首选。如果需要显示中文则选择GB2313.

    TAB_SIZE 主要是帮助文件中代码的缩进尺寸,譬如@code@endcode段中代码的排版,建议设置成4

    OPTIMIZE_OUTPUT_FOR_C 这个选项选择后,生成文档的一些描述性名称会发生变化,主要是符合C习惯。如果

    是纯C代码,建议选择。

    SUBGROUPING这个选项选择后,输出将会按类型分组。

    选择 expert标签下的 Build

    Build页面,这个页面是生成帮助信息中比较关键的配置页面:

    EXTRACT_ALL 表示:输出所有的函数,但是privatestatic函数不属于其管制。

    EXTRACT_PRIVATE 表示:输出private函数。

    EXTRACT_STATIC 表示:输出static函数。同时还有几个EXTRACT,相应查看文档即可。

    HIDE_UNDOC_MEMBERS 表示:那些没有使用doxygen格式描述的文档(函数或类等)就不显示了。当然,如果EXTRACT_ALL被启用,那么这个标志其实是被忽略的。

    INTERNAL_DOCS 主要指:是否输出注解中的@internal部分。如果没有被启动,那么注解中所有的@internal部分都

    将在目标帮助中不可见。

    CASE_SENSE_NAMES 表示:是否关注大小写名称,注意,如果开启了,那么所有的名称都将被小写。对于C/C++这种

    字母相关的语言来说,建议永远不要开启。

    HIDE_SCOPE_NAMES 表示:域隐藏,建议永远不要开启。

    SHOW_INCLUDE_FILES 表示:是否显示包含文件,如果开启,帮助中会专门生成一个页面,里面包含所有包含文件的列

    表。

    INLINE_INFO :如果开启,那么在帮助文档中,inline函数前面会有一个inline修饰词来标明。

    SORT_MEMBER_DOCS :如果开启,那么在帮助文档列表显示的时候,函数名称会排序,否则按照解释的顺序显

    示。

    GENERATE_TODOLIST :是否生成TODOLIST页面,如果开启,那么包含在@todo注解中的内容将会单独生成并显

    示在一个页面中,其他的GENERATE选项同。

    SHOW_USED_FILES :是否在函数或类等的帮助中,最下面显示函数或类的来源文件。

    SHOW_FILES :是否显示文件列表页面,如果开启,那么帮助中会存在一个一个文件列表索引页面。

    选择 expert标签下的 Input Topics

    相关配置说明如下图 5 所示。

     

    说明:输入的源文件的编码,要与源文件的编码格式相同。如果源文件不是UTF-8编码最好转一下。

    选择 expert标签下的 HTML Topics

    相关配置说明如下图 6 所示。

     

    说明:1CHM_FILE文件名需要加上后缀(xx.chm

    2,如果在 Wizard Output Topics 中选择了 prepare for compressed HTML(.chm)选项,此处就会要求选择 hhc.exe 程序的位置。在 windows help workshop 安装目录下可以找到 hhc.exe

    3,为了解决DoxyGen生成的CHM文件的左边树目录的中文变成了乱码,CHM_INDEX_ENCODING中输入GB2312即可。

    4GENERATE_CHI 表示索引文件是否单独输出,建议关闭。否则每次生成两个文件,比较麻烦。

    5TOC_EXPAND 表示是否在索引中列举成员名称以及分组(譬如函数,枚举)名称。

    选择 Run标签

    相关配置说明如下图 7 所示。

     

       点击 Rundoxygen 按钮, Doxygen 就会从源代码中抓取符合规范的注释生成你定制的格式的文档。

     

    四.撰写正确格式的批注

    并非所有程序代码中的批注都会被Doxygen 所处理。您必需依照正确的
    格式撰写。原则上,Doxygen 仅处理与程序结构相关的批注,

    Function
    Class ,档案的批注等。对于Function内部的批注则不做
    处理。Doxygen可处理下面几种类型的批注。

    JavaDoc
    类型:

    /**
     * ...
    批注 ...
     */


    Qt
    类型:

    /*!
     * ...
    批注 ...
     */

        
    单行型式的批注:

    /// ... 批注 ...

       

    //! ... 批注 ...

       
     
    要使用哪种型态完全看自己的喜好。以笔者自己来说,大范围的注
    解我会使用JavaDoc 型的。单行的批注则使用"///"的类型。

    此外,由于Doxygen 对于批注是视为在解释后面的程序代码。也就是
    说,任何一个批注都是在说明其后的程序代码。如果要批注前面的程
    式码则需用下面格式的批注符号。

    /*!< ... 批注 ... */
    /**< ...
    批注 ... */
    //!< ...
    批注 ...
    ///< ...
    批注 ...

       
    上面这个方式并不适用于任何地方,只能用在class member或是
    function
    的参数上。

    举例来说,若我们有下面这样的class


        class MyClass {
            public:
                int member1;
                int member2:
                voidmember_function();
        };
       
    加上批注后,就变成这样:

        /**
         *
    我的自订类别说明 ...
         */
        class MyClass {
            public:
                int member1; ///<
    第一个member说明 ...
                intmember2:  ///<
    第二个member说明 ...
                intmember_function(int a, int b);
        };
       
        /**
         *
    自订类别的member_funtion说明 ...
         *
         * @param a
    参数a的说明
         * @param b
    参数b的说明
         *
         * @return
    传回a+b
         */
        int MyClass::member_function( int a, int b )
        {
            return a+b ;
        }
       
    当您使用Doxygen 产生说明文档时,Doxygen 会帮您parsing 您的程
    式码。并且依据程序结构建立对应的文件。然后再将您的批注,依据
    其位置套入于正确的地方。您可能已经注意到,除了一般文字说明外
    ,还有一些其它特别的指令,像是@param@return 等。这正是
    Doxygen
    另外一个重要的部分,因为一个类别或是函式其实都有固定
    几个要说明的部分。为了让Doxygen 能够判断,所有我们就必需使用
    这些指令,来告诉Doxygen 后面的批注是在说明什么东西。Doxygen
    在处理时,就会帮您把这些部分做特别的处理或是排版。甚至是制作
    参考连结。

    首先,我们先说明在Doxygen 中对于类别或是函数批注的一个特定格
    式。

        /**
         * class
    function的简易说明...
         *
         * class
    function的详细说明...
         * ...
         */
        
    上面这个例子要说的是,在Doxygen 处理一个class 或是function
    解时,会先判断第一行为简易说明。这个简易说明将一直到空一行的
    出现。或是遇到第一个"." 为止。之后的批注将会被视为详细说明。
    两者的差异在于Doxygen 在某些地方只会显示简易说明,而不显示详
    细说明。如:class function的列表。

    另一种比较清楚的方式是指定@brief的指令。这将会明确的告诉
    Doxygen
    ,何者是简易说明。例如:

        /**
         * @brief class
    function的简易说明...
         *
         * class
    function的详细说明...
         * ...
         */

    除了这个class function外,Doxygen 也可针对档案做说明,条件
    是该批注需置于档案的前面。主要也是利用一些指令,通常这部分注
    解都会放在档案的开始地方。如:

        /*! file myfile.h
            rief
    档案简易说明
       
           
    详细说明.
           
            author
    作者信息
        */

    如您所见,档案批注约略格式如上,请别被"" 所搞混。其实,""
    "@" 都是一样的,都是告诉Doxygen后面是一个指令。两种在
    Doxygen
    都可使用。笔者自己比较偏好使用"@"

    接着我们来针对一些常用的指令做说明:

    @file

    档案的批注说明。

    @author

    作者的信息

    @brief

    用于class function的批注中,后面为class function的简易说明。

    @param

    格式为

    @param arg_name 参数说明

    主要用于函式说明中,后面接参数的名字,然后再接关于该参数的说明。

    @return

    后面接函数传回值的说明。用于function的批注中。说明该函数的传回值。

    @retval

    格式为

    @retval value 传回值说明

    主要用于函式说明中,说明特定传回值的意义。所以后面要先接一个传回值。然后在放该传回值的说明。

          
    Doxygen
    所支持的指令很多,有些甚至是关于输出排版的控制。您可从Doxygen的使用说明中找到详尽的说明。

    下面我们准备一组example.h example.cpp 来说明Doxygen 批注的使用方式:

    example.h:

        /**
         * @file
    本范例的include档案。
         *
         *
    这个档案只定义example这个class
         *
         * @author garylee@localhost
         */
               
        #define EXAMPLE_OK  0   ///<
    定义EXAMPLE_OK的宏为0
       
        /**
         * @brief Example class
    的简易说明
         *
         *
    本范例说明Example class
         *
    这是一个极为简单的范例。
         *
         */
        class Example {
            private:
                int var1 ;///<
    这是一个private的变数
            public:
                int var2 ;///<
    这是一个public的变数成员。
                int var3 ;///<
    这是另一个public的变数成员。
                voidExFunc1(void);
                intExFunc2(int a, char b);
                char*ExFunc3(char *c) ;
        };
       
       
    example.cpp:

        /**
         * @file
    本范例的程序代码档案。
         *
         *
    这个档案用来定义example这个class
         * member function

         *
         * @author garylee@localhost
         */
       
        /**
         * @brief ExFunc1
    的简易说明
         *
         * ExFunc1
    没有任何参数及传回值。
         */
        void Example::ExFunc1(void)
        {
            // empty funcion.
        }

        /**
         * @brief ExFunc2
    的简易说明
         *
         * ExFunc3()
    传回两个参数相加的值。
         *
         * @param a
    用来相加的参数。
         * @param b
    用来相加的参数。
         * @return
    传回两个参数相加的结果。
         */
        int ExFunc2(int a, char b)
        {
            return (a+b);
        }
       
        /**
         * @brief ExFunc3
    的简易说明
         *
         * ExFunc3()
    只传回参数输入的指标。
         *
         * @param c
    传进的字符指针。
         * @retval NULL
    空字符串。
         * @retval !NULL
    非空字符串。
         */
        char * ExFunc2(char * c)
        {
            return c;
        }   
       

     

     





  • 相关阅读:
    石家庄地铁线路查询系统(补)
    构建之法阅读笔记03
    构建之法阅读笔记02
    Day 3-3 内置方法
    Day3-2 函数之递归
    Day3-1 函数
    Day2 列表,元组,字典,集合
    Day1 基础知识
    Day1. Python基础知识
    iptables防火墙配置
  • 原文地址:https://www.cnblogs.com/Again/p/3492381.html
Copyright © 2020-2023  润新知