

新闻资讯
技术学院Clang-Tidy 是 LLVM 提供的可扩展 C++ 静态分析工具,依赖 compile_commands.json 获取编译信息,支持按需启用检查规则、自动修复、编辑器集成及 CI/CD 流程嵌入。
Clang-Tidy 是 LLVM 项目提供的一个可扩展的 C++ 静态分析工具,能自动检测常见编程错误、风格问题和潜在缺陷。它不依赖完整编译,但需要准确的编译命令信息(通常来自 compile_commands.json),才能正确解析模板、宏和头文件。
Clang-Tidy 需要知道每个源文件是如何被编译的(包含哪些头路径、宏定义、语言标准等)。最可靠的方式是生成 compile_commands.json:
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..,CMake 会自动生成该文件Bear 拦截编译过程:bear -- make
-p 参数指定路径最简单的用法是检查单个文件:
clang-tidy -p build/ main.cpp常用选项说明:
-p build/:指定编译数据库所在目录(含 compile_commands.json)--checks="-*,cppcoreguidelines-*":禁用所有默认检查,只启用 C++ Core Guidelines 相关规则--fix:自动修复支持就地修改的检查项(如命名、括号格式)--header-filter="^include/|^src/":限制检查范围,避免误报第三方头文件Clang-Tidy 内置数百条检查规则,按类别组织。实用组合示例:
modernize-*:推荐现代 C++ 写法(如用 auto、范围 for、智能指针)cppcoreguidelines-*:遵循 C++ Core Guidelines(如避免裸指针、强制 const 正确性)bugprone-*:捕获易导致崩溃或未定义行为的模式(如空指针解引用、拷贝赋值异常安全)performance-*:提示性能隐患(如传大对象用 const 引用、避免重复计算)--checks="*-*,cppcoreguidelines-*,modernize-*,bugprone-*",再用 -* 排除个别误报项让 Clang-Tidy 真正发挥作用,需嵌入日常环节:
"clang-tidy.enabled": true;CLion 可在 Settings → Editor → Inspections 中启用pre-commit 工具调用 clang-tidy,仅检查暂存文件,失败则阻止提交CMakeLists.txt 中添加 set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=..."),后续构建即自动分析基本上就这些。Clang-Tidy 不复杂但容易忽略编译数据库质量——如果路径不对或宏缺失,误报率会很高。建议从一
个小模块开始试跑,逐步调整 checks 和 filter,再推广到整个项目。