Loading [MathJax]/jax/output/HTML-CSS/jax.js

Linux环境下添加doxygen对C语言的更好的支持

简介:

doxygen能够从代码的注释中自动生成文档。因此,熟练掌握doxygen的注释格式、配置方法和使用模式,能够极大地方便代码阅读、文档制作和代码评审。doxygen的使用可以从软件安装、配置设置、文档生成这几个方面分别介绍。

 

1. 软件安装

 

以centos 为例,首先安装doxgyen:

 

 install doxygen

 yum search doxygen

yum install doxygen-latex.x86_64 doxygen.x86_64 doxygen-doxywizard.x86_64 polkit-qt-doc.noarch

 

接着安装依赖的图形绘制工具软件:grahpviz

 

install graphviz

yum search graphviz

 yum install graphviz-devel.x86_64 graphviz-doc.x86_64 graphviz-gd.x86_64 graphviz-guile.x86_64 graphviz-java.x86_64 graphviz-lua.x86_64 graphviz-perl.x86_64 graphviz-php.x86_64 graphviz-python.x86_64 graphviz-ruby.x86_64 graphviz-tcl.i686 graphviz-tcl.x86_64 graphviz.x86_64 graphviz-guile.x86_64

 

 

为了便于在vim中直接生成doxygen能识别的常用注释,需要添加vim插件的支持:

首先下载vim 插件:

https://vim.sourceforge.io/scripts/script.php?script_id=987



从其中选择 DoxygenToolkit.vim 0.2.13

   


然后依次执行下面的命令和操作:

cp DoxygenTookkit.vim ~/root/.vim/plugin/

在~/.vimrc最后加入下面几行:

[root@localhost plugin]# tail -f /root/.vimrc

"let Tlist_Auto_Open=1

"let g:vimmake_mode = { 'gcc':'quickfix', 'run':'normal' }

let g:vimmake_mode = { 'gcc' : 'async', 'run' : 'normal' }

let g:doxygenToolkit_authorName="TiShai Hua"

let g:doxygenToolkit_briefTag_funcName="yes"

 

map <F2>a :DoxAuthor

map <F2>f :Dox

map <F2>b :DoxBlock

map <F2>c O/** */<Left><Left>

 

这样就可以参考下面的说明来利用Dox/DoxBlock/DoxAuthor来自动生成可被Doxygen理解的注释了:

//// below generated by : DoxAuthor

/**

 * @file test.c

 * @brief

 * @author hongmei

 * @version 0.01

 * @date 2017-09-21

 */

 

//// below generated by : 'Dox ' command in vim

/**

 * @brief

 *

 * @param a

 * @param b

 *

 * @return

 */

int test(int a ,int b)

{

    int c,i;

//// below generated by : 'DoxBlock' command in vim

    /**

     * @name

     * @{ */

    /**  @} */

 

    c = i = 1;

    a++;

 

    return a;

}

 

 

2. 配置设置

可以运行下面的命令来生成doxygen 配置文件:

doxygen -g

接着编辑Doxyfile, 添加对C inline/static/typedef 的支持,实现对目录、文件、函数的递归解析,支持生产引用和被调用的分析图。我主要的设置如下,仅供参考:

[root@localhost]# cat Doxyfile  | grep -v "#" | egrep -v "^"|egrepv"=" | grep -v "NO"

DOXYFILE_ENCODING      = UTF-8

PROJECT_NAME           = "Low-3-sistr"

PROJECT_NUMBER         = "0.01"

OUTPUT_DIRECTORY       = doc/

OUTPUT_LANGUAGE        = Chinese

BRIEF_MEMBER_DESC      = YES

REPEAT_BRIEF           = YES

ALWAYS_DETAILED_SEC    = YES

FULL_PATH_NAMES        = YES

OPTIMIZE_OUTPUT_FOR_C  = YES

MARKDOWN_SUPPORT       = YES

AUTOLINK_SUPPORT       = YES

IDL_PROPERTY_SUPPORT   = YES

TYPEDEF_HIDES_STRUCT   = YES

LOOKUP_CACHE_SIZE      = 0

EXTRACT_ALL            = YES

EXTRACT_PRIVATE        = YES

EXTRACT_STATIC         = YES

EXTRACT_LOCAL_CLASSES  = YES

CASE_SENSE_NAMES       = YES

SHOW_INCLUDE_FILES     = YES

INLINE_INFO            = YES

SORT_MEMBER_DOCS       = YES

GENERATE_TODOLIST      = YES

GENERATE_TESTLIST      = YES

GENERATE_BUGLIST       = YES

GENERATE_DEPRECATEDLIST= YES

MAX_INITIALIZER_LINES  = 30

SHOW_USED_FILES        = YES

SHOW_FILES             = YES

SHOW_NAMESPACES        = YES

INPUT                  = /home/AndiGu

INPUT_ENCODING         = UTF-8

FILE_PATTERNS          = *.c *.cpp *.java *.h

RECURSIVE              = YES

SOURCE_BROWSER         = YES

STRIP_CODE_COMMENTS    = YES

REFERENCED_BY_RELATION = YES

REFERENCES_RELATION    = YES

REFERENCES_LINK_SOURCE = YES

SOURCE_TOOLTIPS        = YES

VERBATIM_HEADERS       = YES

ALPHABETICAL_INDEX     = YES

COLS_IN_ALPHA_INDEX    = 5

GENERATE_HTML          = YES

ENUM_VALUES_PER_LINE   = 4

TREEVIEW_WIDTH         = 250

FORMULA_FONTSIZE       = 10

FORMULA_TRANSPARENT    = YES

MATHJAX_FORMAT         = HTML-CSS

SEARCHENGINE           = YES

GENERATE_LATEX         = YES

LATEX_OUTPUT           = latex

LATEX_CMD_NAME         = latex

MAKEINDEX_CMD_NAME     = makeindex

PAPER_TYPE             = a4

PDF_HYPERLINKS         = YES

USE_PDFLATEX           = YES

LATEX_BIB_STYLE        = plain

RTF_OUTPUT             = rtf

MAN_OUTPUT             = man

MAN_EXTENSION          = .3

XML_OUTPUT             = xml

XML_PROGRAMLISTING     = YES

DOCBOOK_OUTPUT         = docbook

PERLMOD_PRETTY         = YES

ENABLE_PREPROCESSING   = YES

SEARCH_INCLUDES        = YES

CLASS_DIAGRAMS         = YES

HIDE_UNDOC_RELATIONS   = YES

DOT_NUM_THREADS        = 0

DOT_FONTSIZE           = 10

CLASS_GRAPH            = YES

COLLABORATION_GRAPH    = YES

GROUP_GRAPHS           = YES

UML_LOOK               = YES

UML_LIMIT_NUM_FIELDS   = 10

INCLUDE_GRAPH          = YES

INCLUDED_BY_GRAPH      = YES

CALL_GRAPH             = YES

CALLER_GRAPH           = YES

GRAPHICAL_HIERARCHY    = YES

DIRECTORY_GRAPH        = YES

INTERACTIVE_SVG        = YES

MAX_DOT_GRAPH_DEPTH    = 8

 

3. 文档生成

 

然后进入上面配置文件设置的INPUT目录,执行“doxygen", 命令执行完成之后,在output制定的目录里面 就可以看到生产了html目录和latex目录。如果需要用HTML看整个代码,可以在IE或者firefox浏览器中打开annotated.html,可以看到所有的代码结构和注释。

 

wKiom1nEnn6jUBBHAADM8HStLOc172.png


 















本文转自存储之厨51CTO博客,原文链接:http://blog.51cto.com/xiamachao/1967738 ,如需转载请自行联系原作者



相关文章
Linux云服务器如何搭建LNMP环境
LNMP环境是Linux系统中常用的Web服务架构,由Linux、Nginx、MySQL/MariaDB和PHP组成,适用于高效托管动态网站。本文以CentOS 7为例,详细介绍了LNMP环境的搭建步骤,包括Nginx、MariaDB和PHP的安装与配置,以及最终通过创建`index.php`文件验证环境是否成功部署。具体操作涵盖配置YUM仓库、安装服务、编辑配置文件、启动服务等关键步骤,确保用户能够顺利搭建并运行LNMP环境。
28 1
Linux云服务器如何搭建LNMP环境
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
700 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
914 5
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
150 4
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
288 3
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
154 3
Linux下搭建Nginx环境的搭建
Linux下搭建Nginx环境的搭建
109 6
Linux操作系统在云计算环境中的实践与优化###
【10月更文挑战第16天】 本文探讨了Linux操作系统在云计算环境中的应用实践,重点分析了其在稳定性、安全性和高效性方面的优势。通过具体案例,阐述了Linux如何支持虚拟化技术、实现资源高效分配以及与其他开源技术的无缝集成。文章还提供了针对Linux系统在云计算中的优化建议,包括内核参数调整、文件系统选择和性能监控工具的应用,旨在帮助读者更好地理解和应用Linux于云计算场景。 ###
113 3
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等