当前位置: 首页 > news >正文

Doxygen生成接口文档

1.准备好CMakefile.txt,Doxyfile.in安装Doxygen, graphviz。

CMakefile.txt示例:

cmake_minimum_required(VERSION 3.10)
project(xxxxxxxxSDK VERSION 1.0.0)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

# 配置库类型
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(BUILD_STATIC_LIBS "Build static libraries" ON)
option(BUILD_SAMPLES "Build samples applications" ON)
option(BUILD_DOCS "Build API documentation" ON)

# 定义库版本
set(VERSION_MAJOR 1)
set(VERSION_MINOR 0)
set(VERSION_PATCH 0)

# 包含目录
include_directories(include)

# 源文件
set(SOURCES
*****.c
*****.c
********.c
******.c
*******.c
)

# Windows平台特定配置 
if(WIN32)
add_definitions(-DXXXXXX_EXPORTS)
add_library(xxxxxxShared SHARED ${SOURCES})
set_target_properties(xxxxxxShared PROPERTIES
DEFINE_SYMBOL "DXXXXXX_EXPORTS"
VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
SOVERSION "${VERSION_MAJOR}"
OUTPUT_NAME "xxxxxx"
PREFIX ""
SUFFIX ".dll"
)
target_compile_definitions(xxxxxxShared PRIVATE DEVICE_DISCOVERY_EXPORTS)
target_link_libraries(xxxxxxShared ws2_32)

# 静态库
add_library(xxxxxxStatic STATIC ${SOURCES})
set_target_properties(xxxxxxStatic PROPERTIES
OUTPUT_NAME "xxxxxx"
PREFIX "lib"
)

# 链接库
target_link_libraries(xxxxxxStatic PRIVATE ws2_32)

# Linux/Unix平台特定配置
else()
# 构建动态库
if(BUILD_SHARED_LIBS)
add_library(xxxxxxShared SHARED ${SOURCES})
set_target_properties(xxxxxxShared PROPERTIES
VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
OUTPUT_NAME "xxxxxx"
VERSION ${PROJECT_VERSION}
SOVERSION 1
PUBLIC_HEADER "xxxxxx.h"
PREFIX "lib"
SUFFIX ".so"
)
if(WIN32)
target_compile_definitions(xxxxxxShared PRIVATE DEVICE_DISCOVERY_EXPORTS)
target_link_libraries(xxxxxxShared ws2_32)
else()
target_link_libraries(xxxxxxShared pthread)
endif()
endif()

# 构建静态库
if(BUILD_STATIC_LIBS)
add_library(xxxxxxStatic STATIC ${SOURCES})
set_target_properties(xxxxxxStatic PROPERTIES
OUTPUT_NAME "xxxxxx"
PUBLIC_HEADER "xxxxxx.h"
PREFIX "lib"
SUFFIX ".a"
)
if(WIN32)
target_link_libraries(xxxxxxStatic ws2_32)
else()
target_link_libraries(xxxxxxStatic pthread)
endif()
endif()
endif()

# 安装规则
install(TARGETS xxxxxxShared xxxxxxStatic
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
#    RUNTIME DESTINATION bin
#    PUBLIC_HEADER DESTINATION include
)


# 示例程序
if(BUILD_SAMPLES)
add_executable(xxxxxx main.c)
target_link_libraries(xxxxxx xxxxxxShared)
#   target_link_libraries(xxxxxx pthread)
install(TARGETS xxxxxx RUNTIME DESTINATION bin)
endif()

if(WIN32)
else()
# Doxygen文档生成
if(BUILD_DOCS)
find_package(Doxygen REQUIRED dot)

if(DOXYGEN_FOUND)
set(DOXYGEN_PROJECT_NAME "Device Discovery SDK")
set(DOXYGEN_PROJECT_NUMBER "${PROJECT_VERSION}")
set(DOXYGEN_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/docs")
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE "${CMAKE_CURRENT_SOURCE_DIR}/docs/mainpage.md")
#        set(DOXYGEN_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src")
set(DOXYGEN_INPUT ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
set(DOXYGEN_RECURSIVE YES)
set(DOXYGEN_FILE_PATTERNS "*.h" "*.c" "*.md")
set(DOXYGEN_EXTRACT_ALL YES)
set(DOXYGEN_EXTRACT_PRIVATE NO)
set(DOXYGEN_EXTRACT_STATIC YES)
set(DOXYGEN_SOURCE_BROWSER YES)
set(DOXYGEN_GENERATE_TREEVIEW YES)
set(DOXYGEN_HAVE_DOT YES)
set(DOXYGEN_CALL_GRAPH YES)
set(DOXYGEN_CALLER_GRAPH YES)
set(DOXYGEN_DOT_IMAGE_FORMAT "svg")
set(DOXYGEN_GENERATE_LATEX NO)

# 创建自定义目标
add_custom_target(docs
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating API documentation with Doxygen"
VERBATIM
)

# 创建Doxyfile配置文件
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
@ONLY
)

# 安装文档
install(DIRECTORY ${DOXYGEN_OUTPUT_DIRECTORY}/html
DESTINATION share/doc/xxxxxx)
else()
message(WARNING "Doxygen not found - documentation target will not be available")
endif()
endif()
endif()

# 创建测试目标(可选)
enable_testing()
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure)

Doxyfile.in 示例:

# Doxyfile 1.0.1
DOXYFILE_ENCODING      = UTF-8
PROJECT_NAME           = "xxxx xxx name"
PROJECT_NUMBER         = 1.0.0
OUTPUT_DIRECTORY       = docs/
CREATE_SUBDIRS         = NO
USE_MDFILE_AS_MAINPAGE = "@DOXYGEN_USE_MDFILE_AS_MAINPAGE@"
INPUT                  = ./
FILE_PATTERNS          = *.h *.c
RECURSIVE              = @DOXYGEN_RECURSIVE@
EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = NO
EXTRACT_STATIC         = YES
SOURCE_BROWSER         = YES
INLINE_SOURCES         = NO
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION    = YES
GENERATE_TREEVIEW      = @DOXYGEN_GENERATE_TREEVIEW@
HAVE_DOT               = YES
DOT_IMAGE_FORMAT       = "@DOXYGEN_DOT_IMAGE_FORMAT@"
CALL_GRAPH             = YES
CALLER_GRAPH           = YES
GENERATE_LATEX         = @DOXYGEN_GENERATE_LATEX@

2. ubuntu系统环境:

2.1 安装Doxygen, graphviz,执行:sudo apt install doxygen, sudo apt install graphviz

2.2 安装完后,将CMakefile.txt放在源目录位置(如果不这样放,需要更改CMakefile.txt里的文件路径,可根据实际情况修改),

2.3 在源文件目录下创建编译目录,执行:mkdir build,cd build,执行cmake ../  构建(如果没有cmake需要安装),生成Doxyfile文件。

2.4 执行: cmake --build . --target docs,编译生成接口文档html格式,生成在源文件目录,可根据实际情况设定生成目录。

2.5 如果没有错误即可输出接口文档,文档注释需要在代码中增加。

3. windows编译,用vscode打开,配置编译环境即可编译。

http://www.lryc.cn/news/595988.html

相关文章:

  • Hadoop调度器深度解析:FairScheduler与CapacityScheduler的优化策略
  • 运维实战:100条常用SQL语句,涵盖基础查询、数据操作、表管理、索引视图、连接查询、子查询、日期处理、字符串操作等核心操作,建议收藏!
  • Android常用的adb和logcat命令
  • DOM/事件高级
  • ZooKeeper学习专栏(六):集群模式部署与解析
  • Java中内存屏障在volatile和sychronized的应用
  • Apache Ignite 中乐观事务(OPTIMISTIC Transactions)的工作机制
  • 【Go语言-Day 23】接口的进阶之道:空接口、类型断言与 Type Switch 详解
  • TTL+日志的MDC实现简易链路追踪
  • 【从0-1的JavaScript】第2篇:JS对象的创建、使用已经内置对象
  • 操作系统 —— A / 概述
  • API网关原理与使用场景详解
  • Android AppCompat:实现Material Design向后兼容的终极指南
  • Apache Ignite扫描查询
  • 快手视觉算法面试30问全景精解
  • 2025 年非关系型数据库全面指南:类型、优势
  • Apache Ignite缓存基本操作
  • [Dify] -进阶10- Dify 的用户输入结构:变量、参数、文件上传全解析
  • 如何撤销Git提交误操作
  • 【音视频协议篇】RTMP协议
  • haproxy的负载均衡集群搭建
  • 构建智能视频中枢--多路RTSP转RTMP推送模块在轨道交通与工业应用中的技术方案探究
  • 最新AI与Python在地球科学多源数据交叉融合中的前沿技术应用
  • linux用户态各定时器抖动测试
  • 「Linux命令基础」用户组管理
  • MongoDB频繁掉线频繁断开服务的核心原因以及解决方案-卓伊凡|贝贝|莉莉|糖果
  • stream流入门
  • 企业知识库软件选型与实践指南
  • LINUX 722 逻辑卷快照
  • useState