Clang-Tidy 是 LLVM 提供的 C++ 静态分析工具,需嵌入构建流程、统一规则并持续反馈;推荐通过 CMake 集成,支持配置文件、CI 门禁、本地实时检查及自动修复,核心是规则可配、执行可嵌、结果可溯、修复可自动化。
Clang-Tidy 是 LLVM 项目提供的 C++ 静态分析工具,能自动检测代码中潜在的 bug、风格问题、性能隐患和不安全用法。在工程化实践中,它不是“跑一次就完事”的玩具,而是需要嵌入构建流程、统一规则、持续反馈的基础设施。
现代 C++ 项目多用 CMake,Clang-Tidy 可通过 CMAKE_CXX_CLANG_TIDY 变量直接启用:
CMakeLists.txt 根目录添加:set(CMAKE_CXX_CLANG_TIDY "cla
ng-tidy;-checks=-*,cppcoreguidelines-*,modernize-*,performance-*,bugprone-*,cert-*" CACHE STRING "Clang tidy checks")
cmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
硬编码在 CMake 中不易维护,建议抽离为独立配置文件:
.clang-tidy 文件(放在项目根目录),内容示例:Checks: '-*,cppcoreguidelines-*,modernize-use-nodiscard,-cppcoreguidelines-owning-memory,-modernize-use-auto'
WarningsAsErrors: true
HeaderFilterRegex: '^(include|src)'
- 前缀禁用特定检查,用 , 分隔多个规则,支持通配符避免低质量代码合入主干,需在 CI 中强制执行并阻断失败构建:
run-clang-tidy -p build/ -fix -quiet | tee clang-tidy-report.txt
-fix 自动修复可安全修改的问题(如添加 override、[[nodiscard]])clang-tidy-diff.py(LLVM 提供脚本)只检查本次 PR 修改的代码,提升效率和精准度静态检查的价值取决于是否被开发者真正感知和响应:
clang-tidy src/main.cpp -- -Iinclude -std=c++17
run-clang-tidy -p build/ -export-fixes=fixes.yaml && clang-tidy -export-fixes=report.html
alias ct-check='clang-tidy -p build/ -checks="cppcoreguidelines-*,modernize-*"'
Clang-Tidy 的工程化落地核心是:规则可配置、执行可嵌入、结果可追溯、修复可自动化。它不替代 Code Review,但能把重复性、机械性的质量判断交给机器,让团队聚焦更高阶的设计与逻辑问题。