Clang/LLVM

Clang

Clang 是编译器前端,用于 C++、 C、 Objective C++ 和 Objective C 等编程语言。

用 Incredibuild 加速 Clang

什么是 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 的具体功能,以及如何使用?

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 的优势

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++ 进程提供了更多支持。

icon

要点总结

Clang 与任何其他编译器不同,其附带的基础架构可以构建工具,轻松扩展编译进程。LLVM/Clang 源代码包含许多工具,用户还可以在网络上获取更多其他工具。总的来说,Clang 是一个很好的 C/C++ 解析器,也是很方便的构建工具。

获取免费 License

More Compilers

  • CUDA

  • GCC

  • MS (VS) C++

  • g++ / gnu

  • tcc

  • Intel c++ (floating license)

  • ARM c++ (floating license)