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打开,配置编译环境即可编译。