Clang-Tidy 是 LLVM 提供的 C++ 静态分析工具,依赖 compile_commands.json 实现代码检查、自动修复与规则配置,支持命令行、编辑器集成及 CI/CD 流程。
Clang-Tidy 是 LLVM 项目提供的 C++ 静态分析工具,能自动检查代
码风格、潜在 bug、性能问题和现代 C++(如 C++11/14/17/20)合规性。它不依赖完整编译,但需要 编译命令数据库(compile_commands.json) 来理解项目上下文。
多数主流平台都可直接获取:
sudo apt install clang-tidy
brew install llvm(Clang-Tidy 包含在 llvm 套件中,路径通常为 /opt/homebrew/bin/clang-tidy 或 /usr/local/bin/clang-tidy)-DCMAKE_EXPORT_COMPILE_COMMANDS=ON,自动生成 compile_commands.json
Clang-Tidy 需要知道每个源文件的包含路径、宏定义、语言标准等——这些都来自编译命令。没有它,检查会失败或不准。
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. && make(或 ninja),生成 compile_commands.json
compdb 从 Ninja/Make 日志提取,或手动编写(不推荐)基础命令结构:compdb
clang-tidy [options] -- [extra-clang-args]
clang-tidy src/main.cpp --(clang-tidy -p . 'src/**.cpp' -- 指定 compile_commands.json 所在目录)-p .
clang-tidy -p . -checks="-*,cppcoreguidelines-*,modernize-loop-convert" src/test.cpp --(如 auto 类型推导、nullptr 替换 NULL)clang-tidy -p . -fix src/utils.cpp --,后续可用 clang-tidy -p . -export-fixes=fixes.yaml src/*.cpp -- 批量应用在项目根目录放一个 clang-apply-replacements 文件,避免每次输长参数。YAML 格式示例:
Checks: >-
-'*',
-'cppcoreguidelines-*',
-'llvm-*',
+'cppcoreguidelines-avoid-magic-numbers',
+'modernize-use-auto',
+'readability-identifier-naming'
CheckOptions:
- key: readability-identifier-naming.VariableCase
value: lower_case
- key: readability-identifier-naming.FunctionCase
value: camelCase
.clang-tidy 支持通配符和 +/- 增量控制;默认禁用所有(Checks),再显式启用需要的-'*' 可微调规则行为,比如命名规范、作用域范围等让它真正发挥作用,不是只跑一次:
CheckOptions;CLion 内置支持"C_Cpp.clang_tidy.enabled": true,失败时中断构建clang-tidy -p build/ 'src/**/*.cpp' -- | grep -E "(warning|error)" 工具调用 clang-tidy,仅检查暂存文件,避免阻塞开发节奏