文档工具 Doxygen

Doxygen

生成配置

使用 doxygen -g 生成默认配置 或者 使用 doxygen -g <config_file> 通过模板来生成配置。

运行

使用 doxygen <config_file> 来运行,也可以与构建工具 CMake 相结合使用。

语法

有多种方法可以将注释标记为文档, 具体可以查看官方文档

C++ 风格

1
//! ...text...

or

1
/// ...text...

常用指令:
|指令|解释|
|—|—|
|\file |档案的批注说明。|
|\author|作者的信息|
|\brief|用于class 或function的批注中,后面为class 或function的简易说明。|
|\param|格式为\param arg_name 参数说明主要用于函式说明中,后面接参数的名字,然后再接关于该参数的说明。|
|\return|后面接函数传回值的说明。用于function的批注中。说明该函数的传回值。|
|\retval|格式为\retval value 传回值说明.主要用于函式说明中,说明特定传回值的意义。所以后面要先接一个传回值。然后在放该传回值的说明。|

更多指令参考官方文档

在 CMake 中使用 Doxygen

文件结构

1
2
3
4
5
project
├── CMakeLists.txt
└── docs
├── Doxyfile.in
└── doxyfile.cmake

Doxyfile

使用 doxygen -g 命令可以在当前位置生成一份 Doxyfile 的默认配置。

ejson 中的 Doxyfile.in (使用了 graphviz):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Doxyfile 1.9.6
# 编码
DOXYFILE_ENCODING = UTF-8
# 项目名
PROJECT_NAME = "ejson"
# 项目描述
PROJECT_BRIEF = "A recursive descent-based JSON interpreter and generator implemented using C++17."
# 版本号
PROJECT_NUMBER = 0.0.1
PROJECT_LOGO =
# 程序文档输入目录
INPUT = @PROJECT_SOURCE_DIR@
# 递归遍历当前子目录
RECURSIVE = YES
# 排除的文档
EXCLUDE = @PROJECT_SOURCE_DIR@/docs @PROJECT_SOURCE_DIR@/build @PROJECT_SOURCE_DIR@/test
# 文档输出目录
OUTPUT_DIRECTORY = "@PROJECT_BINARY_DIR@/doc"
# 是否关注大小写名称,注意,如果开启了,那么所有的名称都将被小写。
CASE_SENSE_NAMES = NO
# 按字母顺序排序, 否则按文件中的顺序
SORT_BRIEF_DOCS = YES
# 构造函数和析构函数列在最前面。如果设置为 NO,则构造函数将显示在
# 由SORT_BRIEF_DOCS和SORT_MEMBER_DOCS定义的相应顺序。
# 注意:如果SORT_BRIEF_DOCS设置为 NO 此选项将忽略以进行排序简报
# 成员文档。
# 注意:如果SORT_MEMBER_DOCS设置为 NO 则忽略此选项进行排序
SORT_MEMBERS_CTORS_1ST = YES
# 将 SHOW_NAMESPACES 标记设置为 NO 以禁用命名空间的生成页面。
SHOW_NAMESPACES = NO
# 如果 USE_MDFILE_AS_MAINPAGE 标记引用 markdown 文档的名称是输入的一部分,其内容将放置在主页上
USE_MDFILE_AS_MAINPAGE = @PROJECT_SOURCE_DIR@/README.md
# 在最后生成的文档中,把所有的源代码包含在其中
SOURCE_BROWSER = YES
# 如果EXT_LINKS_IN_WINDOW选项设置为 YES,doxygen 将打开指向通过标签文档在单独窗口中导入的外部符号。
EXT_LINKS_IN_WINDOW = YES
# INCLUDE_PATH 标签可用于指定一个或多个目录
INCLUDE_PATH = @PROJECT_SOURCE_DIR@/ejsonlib
# 添加外部文档
# TAGFILES = "@PROJECT_SOURCE_DIR@/etc/cppreference-doxygen-web.tag.xml=https://en.cppreference.com/w/"
# TAGFILES += "@PROJECT_SOURCE_DIR@/etc/linux-man-doxygen-web.tag.xml=http://man7.org/linux/man-pages/"
# TAGFILES += "@PROJECT_SOURCE_DIR@/etc/rfc-doxygen-web.tag.xml=https://tools.ietf.org/html/"
# 那些没有使用doxygen格式描述的文档(函数或类等)就不显示了 (YES 显示, 如果EXTRACT_ALL被启用,那么这个标志其实是被忽略的。)
HIDE_UNDOC_RELATIONS = NO
# 当 INLINE_GROUPED_CLASSES 标记设置为 YES、类、结构和联合时,显示在包含它们的组中(例如使用 \ingroup)
INLINE_GROUPED_CLASSES = YES
INLINE_SIMPLE_STRUCTS = YES
HTML_COLORSTYLE_HUE = 204
HTML_COLORSTYLE_SAT = 120
HTML_COLORSTYLE_GAMMA = 60
# HTML_EXTRA_STYLESHEET = "@PROJECT_SOURCE_DIR@/docs/style.css"
# 是否生成 LaTex 格式文档
GENERATE_LATEX = NO
EXAMPLE_PATH = "@PROJECT_SOURCE_DIR@/doctests"

# 在程序文档中允许以图例形式显示函数调用关系,前提是你已经安装了 graphviz 软件包
HAVE_DOT = @DOXYGEN_DOT_FOUND@
CLASS_GRAPH = YES
TEMPLATE_RELATIONS = YES
DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
COLLABORATION_GRAPH = NO

# 提取信息,包含类的私有数据成员和静态成员
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
EXTRACT_ANON_NSPACES = YES

# do u liek eclips
GENERATE_ECLIPSEHELP = NO

doxygen.cmake

1
2
3
4
5
6
7
8
9
10
11
12
find_package (Doxygen)
if (DOXYGEN_FOUND)
if (Doxygen_dot_FOUND)
set (DOXYGEN_DOT_FOUND YES)
else (NOT Doxygen_dot_FOUND)
set (DOXYGEN_DOT_FOUND NO)
endif (Doxygen_dot_FOUND)
configure_file ("${PROJECT_SOURCE_DIR}/docs/Doxyfile.in" "${PROJECT_BINARY_DIR}/Doxyfile" @ONLY)
add_custom_target (doc "${DOXYGEN_EXECUTABLE}" "${PROJECT_BINARY_DIR}/Doxyfile"
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}"
COMMENT "Generate docs using Doxygen" VERBATIM)
endif ()

在更目录的 CMakeLists.txt 中 使用 include(docs/doxygen.cmake) 来引入。

build 文件夹下使用

1
2
$ cmake ..
$ make doc

文档生成在 build/doc 目录下。