什么是 Clang?
Clang 是编译器前端工具,支持 C++、 C、 Objective C++ 和 Objective C 等编程语言。
Clang 也是 OpenMP、OpenCL、RenderScript、CUDA 和 HIP 等框架的编译器。Clang 的后端为 LLVM 编译器,从 LLVM 2.6 版本开始,Clang 就包含在 LLVM 的发行版中。
作为 GCC 的替代产品,Clang 编译器的工作方式与 GCC 非常相似,确保移植性能最佳。然而,两者之间的区别在于 GCC 的默认模式为 gnu 89,而 Clang 为 gnu 99.
Clang 的具体功能,以及如何使用?
Clang 编译器与其他编译器的工作流程没什么大的区别,具体分为三个阶段。
第一阶段在前端解析源代码,检查代码是否有误,并生成指定语言的抽象语法树(AST),作为输入代码。
第二阶段是优化前端生成的抽象语法树。
第三阶段也是最后一个阶段,发生在后端,负责生成机器执行的最终代码,该代码以最终目标为准。
Clang 发展历史,以及最新版本
Clang 最初由苹果公司主导编写。苹果开发人员一开始使用 GCC 作为 LLVM 的前端,但这给使用 LLVM 的开发人员带来了一些问题。GCC 系统庞大而笨重,与苹果集成开发环境(IDE)配合度差。
除此之外,LLVM 许可证也与 GCC 不兼容。在此期间,苹果软件大量使用 Objective-C,但这在 GCC 中优先级很低。这就是苹果公司在 2007 年 7 月开发 Clang 项目的原因,后来逐渐将其发展为开源工具。
Clang 的最新版本是 Clang 12。在 2020 年 11 月,Clang 12 已完全支持所有发布的 C++ 标准,部分也支持即将发布的 C++ 20 标准。
立即试用
获取免费 License如何下载安装 Clang
下载并安装 Clang,需要按照下列步骤进行:
- 打开终端窗口。输入命令(clang–version),确认是否已安装 Clang 编译器。
- 如需更新或安装 Clang 编译器,输入以下命令:
command xcode-select–install
接下来将弹出一个窗口,询问是现在安装还是以后安装。单击“安装”后,将出现许可协议。选择“同意”后,您将看到安装正在进行。安装完成后,单击“完成”
如果您仍然想再次检查安装,请在终端中输入:clang–version。
Clang 用例
Clang 的第一个版本是 Clang1.0,与 LLVM 2.6 一同发布。接下来是 Clang C++,可以解析 GCC 4.2 的 libstdc,为某些特定的程序产生可运作的代码,并编译自身。
从 Clang 3.0 到最新的 Clang 12.0.0,编译器已经发展出大量实用功能。
Clang 不断优化,变得更具扩展性,而且轻量、快速。与 GCC 相比,Clang 在编译过程中能保留更多的数据(了解什么是 GCC).,包括主代码的形式。
这种数据保留,有利于错误追踪,定位回主源代码。Clang 可提供具体而详细的错误报告,且机器可读。这样,集成开发环境就可以在编译时为编译器的输出创建索引。
Clang 的功能和属性
参考 Alibabatech 的性能对比报告, Clang 的前端编译速度明显快于 GCC,内存占用更少。因此,在大型项目开发中,Clang 优势明显。
另外,Clang 编译器生成的诊断报告(错误和警告消息),非常实用,且一目了然。
Clang 使用基于库的体系结构,前端划分为不同的库,可以满足各类的需求,这也简化了每个堆栈层的时间计算及成本预估过程。
Clang 以代码库为基础的工作流程,对新手很友好。因为程序员只需了解基础原理就能轻松上手。
Clang 可支持多样化的客户端,帮助增量编译,也便于连接到集成开发环境中的用户界面。Clang 设计周到、细致,为 C++、Object C 和 C 语言的新工具使用带来了极大的便利。
Clang 可进行广泛地语言扩展。这些扩展与 Microsoft、GCC 和等大多流行编译器兼容,因此,Clang 性能进一步强化。
Clang 编译器还能够与 IDE 集成,让用户能更清楚直观地洞察整个项目。Clang 在LLVM 的 BSD 授权协议下处理商业项目,因为 Clang 本身不是一个可以独立运作的编译器。
Clang 编译器可以嵌入第三方应用程序库。在 BSD 授权协议下,用户可以浏览并改进源代码,从而增强编译器性能。对比了解 GCC vs Clang.
当开发软件对性能的要求极为严苛时,如 Firefox 或 Chrome,Clang 优势明显:
其中包括:
Clang 的优势
- 诊断报告通俗易懂(色彩丰富、表达具体、修复建议实用、typdef 关键词保存、引用来源,包括指出正确的位置等)
- 编译速度更快(速度提升 5-20%)。借助预编译头文件(PCH),速度能进一步提升。下图的 SPEC 编译数据可以印证。
- Clang 可读性强(查找编译错误时),易于重用,如 libcland 功能可以编辑其他工具,扩展编译器。因为 Clang 使用的是 C++ 较新的模块化代码库。
Clang Windows 版
Visual Studio 完全支持 Clang/LLVM 工具集,因此也适合在 Windows 上使用 Clang 的集成开发环境。在 Windows 上安装 Clang 工具很容易。Windows 包含一个 Clang 编译器,这是一个可选的组件,用于 C++ 桌面开发,这将帮助 Clang 在 Windows 中进行进程开发。为了在集成开发环境中获得最好的功能,建议使用 Clang 最新版本。
Clang Linux 版
如果远程 Linux 机器已安装 Visual Studio,且需要用 Clang/LLVM,您需要将 Clang 与包管理器的 Distributor 一起安装。一旦“which-clang”功能可以检测到编译器,就可以正常运转了。
此外,每个 Linux/GNU 发行版或 BSD 都提供 Clang,因为这是打包系统的一部分。Clang 是 macOS X 到 Xcode 4.2 的默认编译器。
如希望以最快速度进行增量构建,强烈建议使用 Ninja 构建系统。
生成的 Visual Studio 项目文件可用于编辑 Clang 的源代码,Clang 将生成用于运行测试的第二个构建目录。
Clang Mac 版
Clang 可以通过 Visual Studio Code 或 Homebrew 安装在 macOS 机器上。
- 第一步是在 macOS 上安装 Visual Studio Code。
- 然后,在 Visual Studio Code 上安装 C++ 扩展程序。为确保已在 macOS 上已安装 Clang,请转到 macOS 终端并键入以下命令:
clang –version
- 如果 macOS 尚未安装 Clang,则输入下列命令进行安装:
xcode-select –install.
- 最后,创建一个新文件夹,运行项目。
使用 Homebrew 进行安装
- 首先,运行下列命令行:
$ brew install llvm - 在使用 Homebrew 安装完 Clang 后,新的二进制文件不会自动出现在路径中。记住这个公式:
OS X already provides this software and installing another version in parallel can cause all kinds of trouble.
OS X 已提供了这个软件,同时安装另一版本会引发各种各样的麻烦。
- 二进制文件如下:
$(brew –prefix llvm)/bin - 运行下列命令行,在路径中显示 Homebrew llvm/clang
$ echo ‘export PATH=”/usr/local/opt/llvm/bin:$PATH”‘ >> ~/.bash_profil
Clang 与 Incredibuild:
Incredibuild 可以大幅提升 Visual Studio 集成开发环境中 Chang/LLVM 的编译速度,或其他编译工具的编译进程,如 CMake、Ninja 等等。借助其独特的进程虚拟化技术,Incredibuild 充分利用网络中的数百个远程内核资源,将 Clang 编译进程无缝分发,大大加快了 Clang 的编译时间。类似的,Incredibuild 也为虚幻引擎分发 Clang++ 进程提供了更多支持。
要点总结
Clang 与任何其他编译器不同,其附带的基础架构可以构建工具,轻松扩展编译进程。LLVM/Clang 源代码包含许多工具,用户还可以在网络上获取更多其他工具。总的来说,Clang 是一个很好的 C/C++ 解析器,也是很方便的构建工具。
获取免费 License