> 技术文档 > Cppcheck 使用教程:本地 + CMake + GitHub Actions 自动分析实战_cppcheck使用详解

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


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 updatesudo 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(cppcheck COMMAND ${CPPCHECK_FULL_COMMAND} 2>&1 | tee ${CPPCHECK_OUTPUT_FILE} COMMENT \"Running Cppcheck...\" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} VERBATIM)

运行方式

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

🧾 四、.cppcheck-suppress 文件使用

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

示例内容:

unreadVariable:src/utils/logger.cppunusedFunction:src/core/debug.cppmissingIncludeSystem

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

🤖 五、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-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install cppcheck run: sudo apt-get update && sudo apt-get install -y cppcheck - name: Run cppcheck run: | 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 report uses: actions/upload-artifact@v4 with: name: cppcheck-report path: 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 集成方案,欢迎留言或私信我继续更新~