clang入门大全以及clang全家桶介绍

Clang介绍

Clang项目属于LLVM项目(实现编译器调试器等所有的一切功能,对标GNU家族中的程序开发工具链)中的一项,在LLVM这个庞大的开源项目中,github源码显示中https://github.com/llvm/llvm-project,clang就是其中一个文件夹而已:

LLVM官网 https://llvm.org/ 我们可以在release页面下载安装包,安装后有2GB左右,里面有非常多的工具,关于clang,就有26个工具(当然有些工具功能有包含关系,见下文),这就是clang工具全家桶了,如下:

Clang 项目为LLVM 项目的类 C 语言家族(C、C++、Objective C/C++、OpenCL、CUDA 和 RenderScript)中的语言提供语言前端和工具基础设施,所有的一切,完全开源,而且具有丰富的文档,非常棒!!!即:提供了关于编译器方面的各种基础库(源代码api)和工具(编译好的可执行文件,称为全家桶),所以模块化非常好,用户可以组合它们,从而自己做出一些有意思的工具,或者定制化自己的编译器。

Clang官网:https://clang.llvm.org/

Clang可以作为一个完整的编译器(clang.exe等),也可以提供api库(LibTooling等),还可以提供工具软件(clang-format.exe等),分别给出了示例,参考 https://releases.llvm.org/14.0.0/tools/clang/docs/index.html

clang官网中提供的所有功能进行整理如下:

Clang的系列工具(称为全家桶)

clang使用文档 Welcome to Clang's documentation! — Clang 14.0.0 documentation

clang命令大全 Index — Clang 16.0.0git documentation

下面的来自 https://clang.llvm.org/

  • clang.exe:是一个完整的编译器了,对标 GCC(gnu家族的)编译器。同时里面好像已经包含了代码智能提示,等功能,通过命令行即可进行选择使用。
  • clang-cl.exe:是一个完整的编译器了,对标MSVC(windows自己的)编译器。

来自 https://releases.llvm.org/14.0.0/tools/clang/docs/index.html 作为工具使用:

  • clang-check.exe: 可用于进行基本的错误检查和 抽象语法树AST 打印
  • clang-format.exe:其目标是根据可配置的样式指南自动重新格式化 C++ 源文件
  • Clang Static Analyzer:一个源代码分析工具,用于查找 C、C++ 和 Objective-C 程序中的错误。但是运行速度很慢(比编译过程慢很多),而且存在误报率,在不断发展中。
  • clang-linker-wrapper.exe:用于创建链接设备映像以进行卸载,在链接阶段使用的
  • clang-nvlink-wrapper.exe:仍然在链接阶段使用的
  • clang-offload-bundler.exe:将多个代码对象组合成单个捆绑的代码对象
  • clang-offload-wrapper.exe:用于 OpenMP 卸载工具链

来自  https://releases.llvm.org/14.0.0/tools/clang/tools/extra/docs/index.html 提供的一些额外工具软件:

  • clang-tidy.exe:检查和错误和错误修复的工具,里面可以选择是否启用Clang Static Analyzer这个功能(就是上面提到的那个)
  • clang-include-fixer:提供一种在一个翻译单元中为缺失符号添加指令的自动方式来解决 手动管理#include任何文件中的指令。我不知道实际工程中的作用
  • modulesize:是一个独立的工具,它检查一组头文件是否提供了使用模块所需的一致定义。例如,它检测是否在多个标头中定义了相同的实体(例如,NULL 宏或 size_t typedef)。我不知道实际工程中的作用
  • pp-trace:是一个跟踪预处理器活动的独立工具。它也被用作 Clang 的 PPCallbacks 接口的测试。我不知道实际工程中的作用
  • clang-rename.exe:其目的是在大型项目中执行有效的重命名操作,例如重命名类、函数、变量、参数、命名空间等。
  • clangd.exe:明白您的 C++ 代码并向您的编辑器添加智能功能:代码完成、编译错误、转到定义等等,好像已经集成了上面的clang-tidy.exe。而clang.exe好像已经包含了这个clangd.exe了。所以应该是我们使用clang.exe就行了,就包含了这些功能。这个clangd.exe非常有用,而且被广泛应用,比如各种IDE后台调用。人家还单独做了个网址 https://clangd.llvm.org/ ,特别漂亮,值得去具体学习一下
  • clang-doc.exe:是一个从源代码和注释生成 C 和 C++ 文档的工具。

上面的这些都是在clang的官网可以查到的,而且有使用文档,其中被IDE所广泛采用的,都介绍完了。而其它工具,clang官网是没有介绍的可能我们得去llvm的官网,因为这些工具可能是在一些llvm网址的下属的论坛网址介绍的(看来不是clang的主要工具),或者,其源码,直接在github官网llvm项目的对应文件夹,或者直接网上搜索这些exe名字吧:(搜索技巧 clang-repl site:https://llvm.org/ 这样就是在llvm中的相关网址进行搜索了,具体看我这篇博客 如何指定网站内搜索关键字(借用已有搜索引擎)_标biao的博客-CSDN博客_在特定网站中检索关键词,或者,直接谷歌搜索这个exe名字吧,也能准确搜出来介绍资料)

  • clang-move.exe:一个作者自己自己基于clang的库加工的,作用是将一个类或者函数快捷的移动到另一个文件去
  • clang-scan-deps.exe:程序中的各文件的依赖关系的扫描工具
  • 其它剩下的几个就不介绍了。。。

其它的一些clang工具

由于clang的各种基础api都模块化的,所以自己也可以去重新加工,编译得到自己的一个clang工具呗。

  • clangbackend.exe:Qt官方自己编译的clang基础库的一些组合得到的一个工具,给QtCreator用的,不知道干啥的。
  • 自己也可以diy出一些基于clang库的工具。。。

总结

clang被广泛用于给IDE做后台软件,比如vscode,vim等编辑器的插件,QtCreator,keil等IDE,都有它。自己做IDE,也需要用它。其中,最常用的是 clang.execlangd.execlang-format.exe

现在我们已经搞清楚了这些情况了,剩下的对于每一项,就自己去搜索相关资料就行了,每个工具都有大量的博客进行了介绍

比如clang-format.exe等工具,就有博客将clang官网介绍做了系列翻译文章 ,可以去看看使用 Clang Tools —— ClangFormat_梦在哪里的博客-CSDN博客

C++ clang工具主要包括clang-tidy和Valgrind。clang-tidy是一个基于抽象语法树(AST)进行代码检测的工具,可以用于检测代码中违反Google-style的地方。相比于基于正则表达式的cpplint,clang-tidy更加强大,但是检测时间也更长。你可以使用apt-get install clang-tidy命令来安装clang-tidy,并使用clang-tidy -list-checks命令列出所有的检测项。你可以使用不同的选项来检测代码中的问题,并使用-fix选项来自动修复一些问题。 另外,分析项目中的编译单元时,clang-tidy需要知道如何编译这些单元。它会查找compile_commands.json文件来获取编译命令。对于CMake项目,你可以使用cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON命令导出compile_commands.json文件。对于GYP项目,你可以使用ninja -C out/D -t compdb cc cxx objc objcxx > compile_commands.json命令导出。对于make项目,你可以使用Bear工具。这些工具可以帮助你生成compile_commands.json文件,以供clang-tidy使用。 另外一个工具是Valgrind,它是一个强大的内存检测工具,但不支持Windows平台。对应于Windows平台的工具是heob,这两个工具都是由Google开发的。你可以使用Valgrind来检测内存问题,例如内存泄漏等。 综上所述,C++ clang工具包括clang-tidy和Valgrind,它们可以帮助你检测代码中的问题和内存问题。 #### 引用[.reference_title] - *1* *2* [C++代码自动检测工具clang-format和clang-tidy](https://blog.csdn.net/weixin_43721070/article/details/122638851)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C++编程辅助工具 CppCheck Clang-Tool Valgrind Heob](https://blog.csdn.net/jerry_yu_1/article/details/125918493)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值