目录
1. Doxygen简介
Doxygen是最流行的开源文档生成工具,支持:
-
自动提取代码注释生成HTML/PDF/CHM等格式
-
支持C/C++/Java/Python等多种语言
-
代码交叉引用、图表生成、测试覆盖率集成
-
可扩展性强,支持自定义指令和脚本
核心优势:通过简单的注释标记,即可生成专业级技术文档
2. 环境准备
2.1 安装配置
# Windows (Chocolatey) choco install doxygen # macOS (Homebrew) brew install doxygen # Linux (Debian) sudo apt-get install doxygen
2.2 验证安装
doxygen --version # 输出示例:1.9.7
3. 代码注释规范
3.1 基本标记
标记 | 用途 |
---|---|
@brief | 简短函数描述 |
@param | 参数说明 |
@return | 返回值说明 |
@warning | 警告信息 |
3.2 文件级注释
/*! * @file Book.h * @author 张三 <zhangsan@example.com> * @version 1.0 * @date 2024-01-01 * * @brief 图书管理系统的核心数据结构定义 */
4. 实战案例:图书馆管理系统
4.1 项目结构
library/ ├── include/ │ ├── Book.h │ └── Patron.h ├── src/ │ ├── Book.cpp │ └── Patron.cpp └── Doxyfile # 配置文件
4.2 头文件文档化(Book.h)
/*! * @class Book * @brief 表示图书信息的类 */ class Book { public: /*! * @brief 构造函数 * @param title 书名 * @param author 作者 * @param isbn ISBN编号 */ Book(const std::string& title, const std::string& author, const std::string& isbn); /*! * @brief 获取书籍详细信息 * @return 包含所有信息的字符串 */ std::string getDescription() const; private: std::string title; ///< 书名 std::string author; ///< 作者 std::string isbn; ///< ISBN编号 };
4.3 源文件文档化(Book.cpp)
#include "Book.h" /*! * @brief 构造函数实现 * 初始化书籍的基本信息 * @param title 书名 * @param author 作者 * @param isbn ISBN编号 */ Book::Book(const std::string& title, const std::string& author, const std::string& isbn) : title(title), author(author), isbn(isbn) {} /*! * @brief 获取书籍描述 * 组合书名、作者和ISBN号生成描述信息 * @return 格式化的字符串 */ std::string Book::getDescription() const { return std::string("《") + title + "》 by " + author + " (ISBN: " + isbn + ")"; }
4.4 配置文件详解(Doxyfile)
# 项目信息 PROJECT_NAME = Library Management System OUTPUT_DIRECTORY = docs INPUT = include src # 代码解析 ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES # 文档格式 HTML_OUTPUT = html CHM_OUTPUT = chm PDF_OUTPUT = pdf # 图表生成 HAVE_DOT = YES CLASS_DIAGRAMS = YES # 高级设置 EXTRACT_ALL = YES RECURSIVE = YES PRIVATE_MEMBER_ACCESS = YES
5. 高级功能
5.1 自定义图表
/*! * @class Library * @brief 图书馆管理系统核心类 * * \dotgraph[ * A[Book] --> B[Patron] * B --> C[LoanRecord] * ] */ class Library { // ... };
5.2 测试覆盖率集成
# 生成带测试覆盖率的文档 doxygen --gtest=../test
5.3 多语言支持
/*! * @brief 获取书籍价格 * @note 价格单位:人民币(CNY) * @return float 价格 * * \english Price calculation formula * \f$ price = basePrice * (1 + taxRate) \f$ * \french Prix calculé selon la formule \f$ prix = prixDeBase * (1 + tauxTaxe) \f$ */ float getPrice() const;
6. 常见问题
6.1 注释未显示
-
检查是否启用了
EXTRACT_ALL
-
确认文件路径在
INPUT
中 -
验证注释语法是否正确
6.2 图表不生成
# 安装Graphviz依赖 sudo apt-get install graphviz