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 集成方案,欢迎留言或私信我继续更新~