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

Cppcheck 使用教程:本地 + CMake + GitHub Actions 自动分析实战

Cppcheck 是一款强大的 C/C++ 静态分析工具,专注于发现内存泄漏、未初始化变量、死代码、未使用函数等问题。它不依赖编译器,适合在持续集成和本地开发中快速定位潜在 Bug。

本文将手把手教你如何:

  • 安装 Cppcheck

  • 在命令行中使用

  • 集成到 CMake 构建系统

  • 使用 .cppcheck-suppress 管理误报

  • 配置 GitHub Actions 自动执行静态分析

  • 生成 HTML 报告进行可视化展示

目录

📚 一、Cppcheck 安装方式

🔍 二、命令行使用示例

🔧 三、CMake 构建系统集成 Cppcheck

🧾 四、.cppcheck-suppress 文件使用

🤖 五、GitHub Actions 自动运行 Cppcheck

📊 六、生成 HTML 图形化报告(可选)

✅ 七、总结建议

📎 附:Cppcheck 官方资料


📚 一、Cppcheck 安装方式

✅ Ubuntu / Debian

sudo apt update
sudo apt install cppcheck

🍎 macOS(Homebrew)

brew install cppcheck

🪟 Windows

前往官方下载地址:https://cppcheck.sourceforge.io/ 下载 GUI 或 CLI 版本。


🔍 二、命令行使用示例

下面是一条完整的 cppcheck 命令,可对 src/ 目录进行全面检查,并输出报告:

cppcheck \--enable=all \--inconclusive \--std=c++17 \--inline-suppr \--force \-j4 \--suppressions-list=.cppcheck-suppress \-I include -I src \src 2> cppcheck_report.txt

参数说明:

参数含义
--enable=all启用所有检测
--inconclusive显示不确定的问题
--inline-suppr支持在代码中内联屏蔽
--force强制分析所有代码路径
--suppressions-list使用外部 suppress 文件屏蔽特定警告
-j4并行分析线程数
-I指定头文件路径

🔧 三、CMake 构建系统集成 Cppcheck

示例 CMakeLists.txt 添加如下内容:

set(CPPCHECK_COMMAND cppcheck)
set(CPPCHECK_OPTIONS --enable=all --inconclusive --std=c++17 --inline-suppr --force -j4--suppressions-list=${CMAKE_SOURCE_DIR}/.cppcheck-suppress
)set(CPPCHECK_OUTPUT_FILE ${CMAKE_BINARY_DIR}/cppcheck_report.txt)set(SOURCE_DIRS${CMAKE_SOURCE_DIR}/src${CMAKE_SOURCE_DIR}/include
)set(CPPCHECK_FULL_COMMAND ${CPPCHECK_COMMAND} ${CPPCHECK_OPTIONS})
foreach(DIR ${SOURCE_DIRS})set(CPPCHECK_FULL_COMMAND "${CPPCHECK_FULL_COMMAND} -I ${DIR} ${DIR}")
endforeach()add_custom_target(cppcheckCOMMAND ${CPPCHECK_FULL_COMMAND} 2>&1 | tee ${CPPCHECK_OUTPUT_FILE}COMMENT "Running Cppcheck..."WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}VERBATIM
)

运行方式

cmake -B build
cmake --build build --target cppcheck

🧾 四、.cppcheck-suppress 文件使用

用于集中屏蔽误报项,防止报告中充斥无效告警。

示例内容:

unreadVariable:src/utils/logger.cpp
unusedFunction:src/core/debug.cpp
missingIncludeSystem

支持模糊路径和通配符,可结合版本控制管理误报。

🤖 五、GitHub Actions 自动运行 Cppcheck

适合团队协作项目,每次提交或 PR 自动执行静态检查,保证主干代码质量。

.github/workflows/cppcheck.yml 中添加:

name: Cppcheck Static Analysison:push:paths:- '**.cpp'- '**.h'pull_request:paths:- '**.cpp'- '**.h'jobs:cppcheck:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v4- name: Install cppcheckrun: sudo apt-get update && sudo apt-get install -y cppcheck- name: Run cppcheckrun: |cppcheck \--enable=all \--inconclusive \--std=c++17 \--inline-suppr \--force \-j4 \--suppressions-list=.cppcheck-suppress \-I include -I src \src 2> cppcheck_report.txt- name: Upload cppcheck reportuses: actions/upload-artifact@v4with:name: cppcheck-reportpath: cppcheck_report.txt
  • 每次提交都会触发该流程

  • 可在 Actions 页面下载分析报告


📊 六、生成 HTML 图形化报告(可选)

如果你希望以网页形式查看分析结果,可使用 cppcheck-htmlreport 工具:

安装

pip install cppcheck-htmlreport

生成报告

cppcheck-htmlreport \--file=cppcheck_report.txt \--report-dir=cppcheck_html \--source-dir=.

打开 cppcheck_html/index.html 即可查看报告页面。


✅ 七、总结建议

场景推荐做法
本地检查命令行或 CMake 构建后手动运行
忽略误报.cppcheck-suppress 配合版本控制管理
持续集成GitHub Actions / GitLab CI 自动化执行
项目交付使用 HTML 图形化报告提升可读性


📎 附:Cppcheck 官方资料

  • 官网:https://cppcheck.sourceforge.io/

  • GitHub:https://github.com/danmar/cppcheck


如果你觉得这篇文章对你有帮助,欢迎点赞 👍 收藏 ⭐ 关注我获取更多 C/C++ 工程化实战技巧!

如需扩展:GitLab CI / Jenkins / SonarQube 的 Cppcheck 集成方案,欢迎留言或私信我继续更新~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/255578.html

相关文章:

  • 创业知识概论
  • 【ing】Ubuntu安装Anaconda及环境配置\docker\pycharm
  • Qwen3 Embedding 结构-加载-训练 看透模型设计哲学
  • Linux——库文件生成和使用
  • ADC的传递函数
  • Spring 源码学习 2:Bean 后处理器
  • 大模型学习入门——Day3:注意力机制
  • 零基础入门PCB设计 一实践项目篇 第四章(STM32开发板PCB设计)
  • Seata:微服务分布式事务的解决方案
  • 饼图:数据可视化的“切蛋糕”艺术
  • 详解Redis的过期策略
  • 邮件合并----批量从excel表中导出数据到word中
  • Git——分布式版本控制工具
  • 【ESP32摄像头开发实例】-实现遥控视频小车
  • 让Agent的应用价值增长
  • 热点Key拆分方案实现
  • Excel批量计算时间差
  • 前端 CSS 框架:分类、选择与应用
  • tkinter 的 grid() 布局管理器学习指南
  • GM DC Monitor v2.0 卸载教程
  • lingma(阿里云Ai)结合idea使用
  • 【量化】策略交易之相对强弱指数策略(RSI)
  • HCIP-华为VRP系统基础
  • 3.读取图片和图片采集
  • C#中的QUIC实现
  • 多协议物联网关的方案测试-基于米尔全志T536开发板
  • 【redis】数据结构及操作命令
  • 深入解析:如何实时获取Socket接收缓冲区的数据量
  • 《王者荣耀》系统架构深度技术解析
  • Spring 的IoC 和 AOP