Doxygen 教学指南:从零基础到生成专业文档

前言

1.1 什么是 Doxygen?

Doxygen 是一个从源代码注释中提取信息并生成文档的工具。

这篇指南专为从事嵌入式开发的 C/C++ 程序员设计,目标是帮助你从零开始学会使用 Doxygen 工具生成代码文档。内容包括安装、功能介绍、配置、使用过程及生成 HTML、Markdown、PDF 等格式的文档。对于嵌入式开发者,Doxygen 可以帮助整理复杂的代码逻辑,生成清晰的 API 文档。


第 1 部分:Doxygen 工具安装

1.1 确定开发环境

嵌入式开发通常在 WindowsLinux 或 macOS 上进行。以下以常见操作系统为例,详细讲解如何安装 Doxygen。

Windows 安装步骤

访问 Doxygen 官方网站

打开浏览器,访问 Doxygen 官方下载页面。

在页面中找到 Binary distribution 部分,选择适合你的 Windows 版本(通常是 doxygen-x.y.z.windows.x64.bin.zip 或类似的压缩包)。

点击下载链接,保存压缩包到本地(如 C:Downloads)。

解压安装包

右键单击下载的 .zip 文件,选择“解压到当前文件夹”或使用解压工具(如 7-Zip、WinRAR)。

解压后得到一个文件夹(如 doxygen-x.y.z),里面包含 doxygen.exe 等文件。

添加 Doxygen 到系统环境变量(可选,推荐)

将解压后的文件夹移动到一个固定位置(如 C:Program FilesDoxygen)。

右键“此电脑” → “属性” → “高级系统设置” → “环境变量”。

在“系统变量”中找到 Path,点击“编辑”,添加 Doxygen 的 bin 目录路径(如 C:Program FilesDoxygenin)。

点击“确定”保存。

验证安装

示例输出

Doxygen version 1.13.2 (2025-04-22)

打开命令提示符(按 Win + R,输入 cmd,回车)。

输入以下命令:

doxygen --version

如果显示版本号(如 1.13.2),说明安装成功。

安装 Graphviz(可选,用于生成类图和调用图)

Doxygen 使用 Graphviz 的 dot 工具生成图形。访问 Graphviz 官网,下载 Windows 版本的安装包。

运行安装程序,按照提示完成安装。

同样将 Graphviz 的 bin 目录(如 C:Program FilesGraphvizin)添加到系统环境变量 Path 中。

验证安装:

dot -V

示例输出

dot - graphviz version 12.2.1 (20250422.2002)

安装 LaTeX(可选,用于生成 PDF 文档)

如果需要生成 PDF 格式文档,安装
MiKTeXhttps://miktex.org/download

下载 MiKTeX 安装程序,运行并完成安装。安装过程中会自动配置环境。

Linux 安装(以 Ubuntu 为例)

打开终端,运行以下命令安装 Doxygen:

sudo apt update
sudo apt install doxygen

安装 Graphviz(可选):

sudo apt install graphviz

安装 LaTeX(可选):

sudo apt install texlive-full

验证安装:

doxygen --version
dot -V
macOS 安装(使用 Homebrew)

安装 Homebrew(如果未安装):

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装 Doxygen:

brew install doxygen

安装 Graphviz:

brew install graphviz

安装 LaTeX:

brew install --cask mactex

验证安装:

doxygen --version
dot -V

1.2 安装辅助工具(可选)

生成 PDF 文档:需要安装 LaTeX(如 MiKTeX for Windows 或 TeX Live for Linux/macOS)。

Windows:访问 https://miktex.org/download,下载并安装 MiKTeX。

Linux:运行 sudo apt install texlive-full

macOS:运行 brew install --cask mactex

GUI 工具:Doxywizard 是 Doxygen 的图形界面,适合初学者。

Windows:下载时已包含在 Doxygen 安装包中,位于 bin 目录(doxywizard.exe)。

Linux/macOS:安装 Doxygen 时自动包含,运行 doxywizard 启动。

注意事项

确保网络连接稳定,下载安装包时避免中断。

如果磁盘空间有限,LaTeX 安装包较大(几 GB),可以先跳过 PDF 相关步骤。

安装 Graphviz 是强烈推荐的,因为嵌入式开发中代码关系图非常有用。


第 2 部分 Doxygen 的功能介绍

Doxygen 提供了丰富的功能,适合从初学者到高级用户的需求。以下按 常用功能进阶功能 和 高级功能 分类介绍。

2.1 常用功能

这些功能适合刚入门的开发者,易于上手:

自动提取注释:从代码中的特殊注释(如 /** ... */ 或 ///)生成文档。

支持多种语言:完美支持 C/C++,也支持 Python、Java 等。

生成 HTML 文档:生成带有导航栏、搜索功能的网页格式文档。

生成 Markdown 文档:生成简洁的 Markdown 文件,适合嵌入到 GitHub 或其他平台。

文件和函数文档:为源文件、函数、变量等生成详细说明。

生成函数和类列表

自动生成所有函数、类、结构等的列表。

配置

ALPHABETICAL_INDEX = YES:生成按字母顺序排序的索引。

GENERATE_AUTOGEN_DEF = YES:包含自动生成的定义。

2.2 进阶功能

需要一定配置,适合有一定经验的开发者:

类图和调用图:结合 Graphviz,自动生成类继承关系图、函数调用关系图。

多语言支持:生成多语言文档(如中文、英文)。

自定义样式:修改 HTML 输出的 CSS 或添加自定义页眉页脚。

配置

HTML_STYLESHEET = custom.css:指定自定义 CSS 文件。

HTML_HEADER = header.html:自定义页眉。

示例 CSS

body { font-family: Arial, sans-serif; }
.memtitle { background-color: #007bff; color: white; }

条件编译文档:根据宏定义(如 #ifdef)控制文档内容。

2.3 高级功能

需要深入理解 Doxygen 配置,适合复杂项目:

生成 XML/JSON 输出:用于与其他工具集成(如 CI/CD 管道)。

自定义标签:定义专属的注释标签(如 @my_tag),扩展 Doxygen 的功能。

多项目文档集成:通过 TAGFILES 整合多个项目的文档。

嵌入公式和图表:结合 LaTeX 或 Markdown,生成数学公式或复杂图表。

交互式文档:通过 JavaScript 增强 HTML 文档的交互性。

集成到 CI/CD:自动化生成文档并发布到网站。

配置(以 GitHub Actions 为例):

name: GenerateDoxygenDocs
on: [push]
jobs:
docs:
    runs-on:ubuntu-latest
    steps:
      -uses:actions/checkout@v3
      -run:sudoaptinstalldoxygengraphviz
      -run:doxygenDoxyfile
      -uses:actions/upload-artifact@v3
        with:
          name:doxygen-docs
          path: docs/html/

嵌入式开发相关建议

嵌入式项目通常代码量大、模块复杂,推荐重点掌握 类图和调用图,以可视化模块依赖关系。

使用 条件编译文档 功能,针对不同硬件平台生成特定文档。


第 3 部分:Doxygen 使用教学过程

以下是一个完整的 Doxygen 使用教学,基于一个简单的 C 语言嵌入式项目。我们会从零开始,逐步完成配置和文档生成。

3.1 示例项目准备

假设你有一个简单的嵌入式项目,目录结构如下:

my_project/
├── inc/
│   └── led.h
├── src/
│   └── led.c
└── main.c

led.h(头文件):

#ifndef LED_H
#define LED_H

/**
 * @brief Initialize the LED module.
 * @param pin The GPIO pin number connected to the LED.
 * @return 0 on success, -1 on failure.
 */
int led_init(int pin);

/**
 * @brief Turn the LED on or off.
 * @param state 1 to turn on, 0 to turn off.
 */
void led_set_state(int state);

#endif

led.c(源文件):

#include "led.h"

int led_init(int pin) {
    // Simulate GPIO initialization
    if (pin < 0) return -1;
    return 0;
}

void led_set_state(int state) {
    // Simulate setting GPIO state
}

main.c

#include "led.h"

/**
 * @brief Main entry point of the program.
 */
int main(void) {
    led_init(5);
    led_set_state(1);
    return 0;
}

注释说明

使用 /** ... */ 格式的注释,包含 Doxygen 标签(如 @brief@param@return)。

这些注释会被 Doxygen 提取并生成文档。

3.2 生成 Doxygen 配置文件

创建 Doxygen 配置文件

打开命令提示符(Windows)或终端(Linux/macOS),进入项目目录:

cd path/to/my_project

运行以下命令生成默认配置文件:

doxygen -g Doxyfile

这会在项目目录下生成一个名为 Doxyfile 的配置文件。

编辑 Doxyfile

用文本编辑器(如 VS Code、Notepad++)打开 Doxyfile

修改以下关键配置项(按需调整):

# 项目信息
PROJECT_NAME           = "Media Stream Project"
PROJECT_NUMBER         = 1.0.0
OUTPUT_DIRECTORY       = docs/
OUTPUT_LANGUAGE        = Chinese
DOXYFILE_ENCODING      = UTF-8
INPUT_ENCODING         = UTF-8

# 输入设置
INPUT                  = ./
RECURSIVE              = YES
FILE_PATTERNS          = *.h
EXCLUDE                = *.c *.cpp

# 输出格式
GENERATE_HTML          = YES
GENERATE_MARKDOWN      = YES  # 需要 Doxygen 1.9.5+
GENERATE_LATEX         = YES

# 提取所有实体
EXTRACT_ALL            = YES  # 如果注释不足,设置为 YES 可提取所有实体
EXTRACT_PRIVATE        = NO  # 私有函数等(默认不支持)
EXTRACT_STATIC         = NO  # 静态函数等(默认不支持)
EXTRACT_LOCAL_CLASSES  = YES

# 类图和调用图(可选)
HAVE_DOT               = YES
CLASS_DIAGRAMS         = YES
CALL_GRAPH             = YES
CALLER_GRAPH           = YES

# 宏展开
MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = NO

保存文件。

修改 refman.tex(可选)

如果不想使用自定义页眉,可以直接编辑 refman.tex

打开 docs/latex/refman.tex,找到封面部分(通常在文件的开头)。

示例 refman.tex 的封面部分可能如下:

pdftitle={LED}
{Large LED}
{large 制作者 Doxygen 1.13.2}
fancyfoot[LO, RE]{fseriesscriptsize 制作者 Doxygen }

将 pdftitle={LED} 修改为:

 pdftitle={主标题}

例如:

 pdftitle={LED设计使用指南}

将 {large 制作者 Doxygen 1.13.2} 修改为:

 {large 你的名字}

例如:

 {large 制作者 张三}

在 {large 制作者 Doxygen 1.13.2} 下一行添加日期(生成文档的当天):

 {
ormalsize 	oday}\

将页脚 fancyfoot[LO, RE]{fseriesscriptsize 制作者 Doxygen } 修改为::

 fancyfoot[LO, RE]{fseriesscriptsize 作者 你的名字 }

例如:

 fancyfoot[LO, RE]{fseriesscriptsize 作者 张三 }

注意事项

INPUT 路径要包含所有需要生成文档的代码文件。

如果项目中有大量文件,使用 RECURSIVE = YES 自动扫描子目录。

确保 OUTPUT_DIRECTORY 是一个存在的目录,或留空(默认在当前目录生成)。

3.3 运行 Doxygen

在项目目录下运行以下命令:

doxygen Doxyfile

Doxygen 会根据 Doxyfile 配置,扫描代码并生成文档。输出目录(docs/)将包含:

html/:HTML 格式文档。

markdown/:Markdown 格式文档(如果启用)。

latex/:LaTeX 格式文档(如果启用)。

注意事项

如果报错“dot not found”,检查是否安装了 Graphviz 并添加到环境变量。

如果注释格式不正确,Doxygen 可能无法提取信息,确保使用 /** ... */ 或 ///


4. 手把手生成 HTML、Markdown 和 PDF 文档

以下是生成不同格式文档的详细步骤,包含示例输出说明。

4.1 生成 HTML 文档

确保配置

在 Doxyfile 中,确认以下设置:

GENERATE_HTML = YES
OUTPUT_DIRECTORY = docs/

运行 Doxygen

执行:

doxygen Doxyfile

生成的 HTML 文件位于 docs/html/ 目录下。

查看结果

示例 HTML 输出led_init 的文档):

<h2>led_init</h2>
<p><b>int led_init (int pin)</b></p>
<p>Initialize the LED module.</p>
<dl>
  <dt>Parameters</dt>
  <dd><b>pin</b>: The GPIO pin number connected to the LED.</dd>
  <dt>Returns</dt>
  <dd>0 on success, -1 on failure.</dd>
</dl>

打开 docs/html/index.html(用浏览器查看)。

界面示例(假设安装了 Graphviz):

左侧导航栏:显示文件、函数、类等列表。

主页面:显示项目概述、函数 led_init 和 led_set_state 的详细说明。

调用图:显示 main 调用 led_init 和 led_set_state 的关系。

注意事项

如果需要自定义 HTML 样式,修改 Doxyfile 中的 HTML_STYLESHEET 或 HTML_EXTRA_FILES

确保代码注释规范,否则生成的文档可能不完整。

4.2 生成 Markdown 文档

确保配置

在 Doxyfile 中,确认以下设置(Doxygen 1.9.5+ 支持):

GENERATE_MARKDOWN = YES
OUTPUT_DIRECTORY = docs/

运行 Doxygen

执行:

doxygen Doxyfile

生成的 Markdown 文件位于 docs/markdown/ 目录下。

查看结果

打开 docs/markdown/ 下的 .md 文件(如 led_8h.md)。

示例 Markdown 输出(led.h 的文档):

# led.h

## led_init
Initialize the LED module.

**Parameters**:
- `pin`: The GPIO pin number connected to the LED.

**Returns**:
- 0 on success, -1 on failure.

## led_set_state
Turn the LED on or off.

**Parameters**:
- `state`: 1 to turn on, 0 to turn off.

注意事项

Markdown 文档适合嵌入到 GitHub 或 GitLab 的 README 中。

如果需要调整 Markdown 格式,需修改 Doxygen 源代码(较复杂,初学者可忽略)。

4.3 生成 PDF 文档

小贴士:

如果在执行 pdflatex refman.tex 过程中有弹窗提示宏包安装。

直接点安装即可(这是因为使用环境缺失对应的安装包,因此才会提示安装)。

确保配置

在 Doxyfile 中,确认以下设置:

GENERATE_LATEX = YES
OUTPUT_DIRECTORY = docs/

确保已安装 MiKTeX 或 TeX Live。

运行 Doxygen

执行:

doxygen Doxyfile

生成的 LaTeX 文件位于 docs/latex/ 目录下。

编译 LaTeX 生成 PDF

进入 docs/latex/ 目录:

cd docs/latex

运行以下命令(Windows 使用 MiKTeX 的 pdflatex):

pdflatex refman.tex

可能需要运行多次(通常 2-3 次)以生成完整的 PDF:

pdflatex refman.tex

生成的 PDF 文件为 refman.pdf

查看结果

打开 refman.pdf,内容与 HTML 文档类似,但格式更适合打印或正式发布。

示例 PDF 内容:

封面:显示项目名称和版本。

目录:列出所有文件和函数。

正文:详细描述 led_init 和 led_set_state,包含参数和返回值。

在 PDF 文档中添加水印:

详情请参考《在 Doxygen 生成的 PDF 添加水印》。

注意事项

LaTeX 编译可能因缺少字体或包而报错,使用 MiKTeX 的自动包管理功能可解决。

PDF 文件较大,适合正式文档,不建议频繁生成。


5. 总结与进阶建议

5.1 总结

通过以上步骤,你已经学会:

安装 Doxygen 和相关工具(Graphviz、LaTeX)。

配置 Doxygen 生成 HTML、Markdown 和 PDF 文档。

为 C/C++ 代码编写规范的 Doxygen 注释。

生成包含调用图的文档,适合嵌入式开发。

5.2 进阶建议

规范化注释:为所有函数、变量、宏添加 Doxygen 注释,Doxygen 官方手册

自动化生成:将 Doxygen 集成到 CI/CD 流程(如 GitHub Actions),每次提交代码时自动更新文档。

学习高级标签:如 @ingroup(分组)、@todo(待办事项),提升文档组织性。

嵌入式特定优化:为硬件寄存器或驱动代码添加自定义标签,清晰描述硬件相关功能。

5.3 常见问题解答

Q:为什么生成的文档缺少某些函数?

A:检查函数是否添加了 Doxygen 注释(如 /** ... */),或 Doxyfile 中的 INPUT 是否包含相关文件。

Q:调用图没有生成?

A:确保安装了 Graphviz,并设置 HAVE_DOT = YESCALL_GRAPH = YES

Q:中文文档显示乱码?

A:设置 OUTPUT_LANGUAGE = Chinese,并确保代码文件使用 UTF-8 编码。

Q:中文文档显示乱码?

A:输出的文档内容仅包含原文(即头文件的原始代码),而未能生成类、宏、函数等的详细描述(如函数的 @brief 、@param 等注释内容)。 这通常是由于 Doxygen 的配置或注释格式问题导致的:

确保所有依赖文件在项目目录中,或在 INPUT 中指定其路径。

临时注释掉缺失的 #include(仅用于不想引入的头文件或测试)


📌 免费领取学习资源进入公众号,点击【资源合集】-【电子书籍】即可领取!🚀🚀🚀

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容