天天看点

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

Clang介绍

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

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

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

clang入门大全以及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自己的)编译器。

作为工具使用:

  • 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 卸载工具链

供的一些额外工具软件:

  • 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中的相关网址进行搜索了,具体看我这篇博客 者,直接谷歌搜索这个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.exe,clangd.exe,clang-format.exe