clang-tidy在clion中启用实时检查需三步:勾选enable clang-tidy并指定正确clang-tidy路径;在configuration file中选择use .clang-tidy file from project root;必须勾选live update才能实现实时高亮。

Clang-Tidy 在 CLion 中怎么启用实时检查
CLion 默认已集成 Clang-Tidy,但默认只启用少量检查项,且不自动读取项目级 .clang-tidy 文件——必须手动确认配置路径和作用域。
- 进入
Settings > Editor > Inspections > C/C++ > Static Analysis Tools > Clang-Tidy - 勾选
Enable Clang-Tidy,并确保Use clang-tidy from PATH指向正确二进制(如/opt/homebrew/bin/clang-tidy) - 关键一步:在
Configuration file下拉菜单中选择Use .clang-tidy file from project root;若选Use IDE settings,则.clang-tidy文件会被完全忽略 - 勾选
Live update (show in “Current File”)才能实现实时高亮;不勾选时,仅在手动Inspect Code时生效
常见错误是看到警告没反应——八成是因为没勾选 live update,或误选了 IDE settings 模式。
VS Code + clangd 插件如何让 Clang-Tidy 生效
VS Code 本身不直接运行 Clang-Tidy,而是通过 clangd 语言服务器转发请求。它依赖 compile_commands.json 和 .clang-tidy 两个文件协同工作,缺一不可。
Clang 22.1.3 Windows 64 位历史版本安装包,适合旧项目兼容、LLVM/Clang 工具链回退、编译行为对比、链接问题复现和 C/C++ 构建环境维护。
-
clangd启动时会自动查找项目根目录下的.clang-tidy,但仅当该文件存在且语法合法(YAML 格式)时才加载规则 -
compile_commands.json必须位于clangd工作目录(通常是打开的文件夹根目录),否则所有包含路径相关的检查(如cppcoreguidelines-include-cleaner)都会失效 - 在
settings.json中显式启用:"clangd.arguments": ["--clang-tidy", "--clang-tidy-checks=-*,readability-*,bugprone-*"]—— 这会覆盖.clang-tidy中的Checks字段,慎用 - 若编辑器右下角显示
clangd: idle却无任何提示,先运行clang-tidy --version确认 PATH 可达,再检查compile_commands.json是否真被clangd读到(日志里搜compilation database)
DevEco Studio 中 Clang-Tidy 配置优先级怎么判断
DevEco Studio 对 Clang-Tidy 支持三套并行配置机制,但它们的生效场景互不重叠,容易混淆。
-
File > Settings > Languages & Frameworks > C/C++ > Use clang-tidy via clangd:仅影响编辑器内实时检查,且**不读取.clang-tidy文件** -
.clang-tidy文件(工程根目录):仅对 CLI 调用(如终端执行clang-tidy -p . src/*.cpp)和部分插件生效;在 DevEco 中,它**只参与手动Inspect Code的扫描结果** -
Code > Inspect Code > Configure > CPP > clang-tidy:这是唯一能控制手动检查(Inspect Code)所用规则的地方;其配置**完全独立于前两者**,也不会写入任何文件 - 结论:想改实时提示,调第一处;想改右键
Inspect Code结果,必须进第三处设置——二者规则不会同步,也不能互相覆盖
为什么 .clang-tidy 文件写了却没效果
不是文件没被读,而是 YAML 格式、路径或作用域出问题。Clang-Tidy 解析失败时通常静默跳过,不报错。
- 检查缩进:YAML 对空格敏感,
Checks:后必须跟一个空格,再接单引号字符串,例如:Checks: '-*,modernize-use-auto',不能写成Checks:'-*,modernize-use-auto'(冒号后无空格) - 确保文件名是
.clang-tidy(纯英文点开头),不是.clang-tidy.yaml或clang-tidy.yml—— Clang-Tidy 只认前者 - Clang-Tidy 按“最近父目录”查找
.clang-tidy,如果在src/目录下打开文件,而.clang-tidy只在项目根目录,它仍会读到;但如果在build/目录下执行命令,且该目录下有另一个.clang-tidy,就会优先用那个 - 用
clang-tidy -list-checks -p .验证当前配置是否生效:输出列表里出现你启用的检查名(如modernize-use-auto),才算真正加载成功
最常被忽略的是:Clang-Tidy 不验证 .clang-tidy 里的规则名是否存在。写错一个检查名(比如 modernize-use-aut0),它就默默跳过,既不报错也不启用——只能靠 -list-checks 交叉核对。










