0

0

c++ Clang-Tidy怎么用 c++静态代码分析工具【指南】

尼克

尼克

发布时间:2025-12-26 09:19:02

|

236人浏览过

|

来源于php中文网

原创

Clang-Tidy 是 LLVM 提供的 C++ 静态分析工具,依赖 compile_commands.json 实现代码检查、自动修复与规则配置,支持命令行、编辑器集成及 CI/CD 流程。

c++ clang-tidy怎么用 c++静态代码分析工具【指南】

Clang-Tidy 是 LLVM 项目提供的 C++ 静态分析工具,能自动检查代码风格、潜在 bug、性能问题和现代 C++(如 C++11/14/17/20)合规性。它不依赖完整编译,但需要 编译命令数据库(compile_commands.json) 来理解项目上下文。

一、安装 Clang-Tidy

多数主流平台都可直接获取:

  • Linux(Ubuntu/Debian)sudo apt install clang-tidy
  • macOS(Homebrew)brew install llvm(Clang-Tidy 包含在 llvm 套件中,路径通常为 /opt/homebrew/bin/clang-tidy/usr/local/bin/clang-tidy
  • Windows:安装 LLVM 官方预编译包,勾选 “Add LLVM to the system PATH”
  • CMake 项目推荐方式:启用 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON,自动生成 compile_commands.json

二、生成 compile_commands.json(关键前提)

Clang-Tidy 需要知道每个源文件的包含路径、宏定义、语言标准等——这些都来自编译命令。没有它,检查会失败或不准。

  • CMake 项目:在构建目录运行 cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. && make(或 ninja),生成 compile_commands.json
  • 非 CMake 项目:可用 compdb 从 Ninja/Make 日志提取,或手动编写(不推荐)
  • 确保该文件位于项目根目录或 Clang-Tidy 当前工作目录下

三、常用运行方式

基础命令结构:compdb

剪映
剪映

一款全能易用的桌面端剪辑软件

下载

立即学习C++免费学习笔记(深入)”;

  • 检查单个文件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)
  • 导出 JSON 报告clang-tidy -p . -fix src/utils.cpp --,后续可用 clang-tidy -p . -export-fixes=fixes.yaml src/*.cpp -- 批量应用

四、配置检查规则(.clang-tidy 文件)

在项目根目录放一个 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),再显式启用需要的
  • -'*' 可微调规则行为,比如命名规范、作用域范围等
  • 完整规则列表见:Clang-Tidy Checks Reference

五、集成到开发流程

让它真正发挥作用,不是只跑一次:

  • 编辑器集成:VS Code 安装 C/C++ Extension Pack + 设置 CheckOptions;CLion 内置支持
  • CI/CD 中运行:在 GitHub Actions / GitLab CI 加一步:"C_Cpp.clang_tidy.enabled": true,失败时中断构建
  • 预提交钩子:用 clang-tidy -p build/ 'src/**/*.cpp' -- | grep -E "(warning|error)" 工具调用 clang-tidy,仅检查暂存文件,避免阻塞开发节奏

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

400

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

528

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

306

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

67

2025.09.10

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

226

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

430

2024.03.01

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

255

2023.10.25

笔记本电脑卡反应很慢处理方法汇总
笔记本电脑卡反应很慢处理方法汇总

本专题整合了笔记本电脑卡反应慢解决方法,阅读专题下面的文章了解更多详细内容。

1

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6万人学习

Git 教程
Git 教程

共21课时 | 2.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号