Clang-Tidy 是 LLVM 提供的 C++ 静态分析工具,需嵌入构建流程、统一规则并持续反馈;推荐通过 CMake 集成,支持配置文件、CI 门禁、本地实时检查及自动修复,核心是规则可配、执行可嵌、结果可溯、修复可自动化。

Clang-Tidy 是 LLVM 项目提供的 C++ 静态分析工具,能自动检测代码中潜在的 bug、风格问题、性能隐患和不安全用法。在工程化实践中,它不是“跑一次就完事”的玩具,而是需要嵌入构建流程、统一规则、持续反馈的基础设施。
集成到 CMake 构建系统(推荐方式)
现代 C++ 项目多用 CMake,Clang-Tidy 可通过 CMAKE_CXX_CLANG_TIDY 变量直接启用:
- 在
CMakeLists.txt根目录添加:set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=-*,cppcoreguidelines-*,modernize-*,performance-*,bugprone-*,cert-*" CACHE STRING "Clang tidy checks") - 确保使用 Ninja 或 Make 等支持编译数据库(compile_commands.json)的生成器:
cmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. - 构建时,Clang-Tidy 会自动对每个编译单元执行检查,并将结果输出到终端或日志中
定制检查规则并维护配置文件
硬编码在 CMake 中不易维护,建议抽离为独立配置文件:
- 创建
.clang-tidy文件(放在项目根目录),内容示例:Checks: '-*,cppcoreguidelines-*,modernize-use-nodiscard,-cppcoreguidelines-owning-memory,-modernize-use-auto'
WarningsAsErrors: true
HeaderFilterRegex: '^(include|src)' - 该文件会被 Clang-Tidy 自动识别,优先级高于命令行参数
- 用
-前缀禁用特定检查,用,分隔多个规则,支持通配符
与 CI/CD 流水线结合实现门禁控制
避免低质量代码合入主干,需在 CI 中强制执行并阻断失败构建:
立即学习“C++免费学习笔记(深入)”;
- 在 GitHub Actions / GitLab CI 中调用:
run-clang-tidy -p build/ -fix -quiet | tee clang-tidy-report.txt - 使用
-fix自动修复可安全修改的问题(如添加override、[[nodiscard]]) - 配合
clang-tidy-diff.py(LLVM 提供脚本)只检查本次 PR 修改的代码,提升效率和精准度 - 将报告转为 SARIF 格式,接入 GitHub Code Scanning,实现问题直接标注在 PR diff 上
开发者本地高效使用习惯
静态检查的价值取决于是否被开发者真正感知和响应:
- VS Code 安装 C/C++ Extension Pack + Clang-Tidy 插件,编辑时实时高亮问题
- 在终端快速对单个文件检查:
clang-tidy src/main.cpp -- -Iinclude -std=c++17 - 定期运行全量扫描并生成 HTML 报告:
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,但能把重复性、机械性的质量判断交给机器,让团队聚焦更高阶的设计与逻辑问题。











