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 集成方案,歡迎留言或私信我繼續更新~