39

本周新的 Xcode 3.2.1 中包含的自述文件如下:

  • 静态代码分析通过 Build 菜单下的 Build and Analyze 选项或自定义构建设置完全集成在 Xcode IDE 中
  • GCC 4.2 是 10.6 SDK 的默认系统编译器
  • 可选的 LLVM 编译器包含使用两个不同的前端 - Clang 编译器是一个领先的解析器,可提供显着改进的编译时间。为了获得最大的兼容性,GCC LLVM 编译器将 LLVM 后端与 GCC 4.2 解析器一起使用。
  • 新的可选 Clang-LLVM 1.0 编译器使用速度更快的 Clang 前端解析器与 LLVM 后端编译器相结合,以实现快速编译和快速可执行代码。许多项目将从这种编译器组合中受益,尽管 GCC 4.2 仍然是系统默认值。Clang-LLVM 1.0 编译器在遇到 C++ 代码时将回退到使用 LLVM-GCC 4.2。

我们公司现有的项目是用于桌面和 iphone 的纯 C、Objective-C 和 Objective-C++。有人可以概括一下 LLVM、GCC、CLANG、CLANG-LLVM、WordFoo 等之间的区别吗?人。并解释它们是什么以及我们应该何时使用它们以及用于什么目的?有更详细解释的链接会很好,但我真的只是在寻找高级概述。

4

1 回答 1

53

简而言之:

编译器基本上分为两部分。一个是包含编程语言的解析器和语义分析的前端。前端会为您的代码生成某种中间表示。然后是后端,它获取前端生成的东西,对其进行优化,并最终生成汇编代码。

  • GCC:众所周知的编译器,包含各种语言的前端和许多处理器架构的后端
  • LLVM:一组用于各种架构(和其他低级东西)的后端
  • clang:C、Objective-C 和 C++ 的新前端;使用 LLVM 后端。你会从你的编译器和更短的编译时间中得到更多可读的错误和警告。您可能还会遇到不兼容或错误;clang 是一个非常年轻的项目。
  • LLVM-GCC:GCC 的前端和 LLVM 的后端。LLVM 的后端比 GCC 的快。

clang 的(Objective-)C++ 支持远未完成,因此它在遇到 C++ 源文件时会调用 llvm-gcc。它还包含现在集成到 Xcode 中的静态分析器。有人说 LLVM 的后端生成的代码比 GCC 的更好,但你的情况可能会有所不同。LLVM 还支持链接时优化(您可以在 Xcode 的项目设置中启用)。他们可能会产生更快的代码。

苹果希望在未来用 clang 替换 GCC,因为他们有针对 GPLv3 许可代码的政策(GCC 4.2 是最后一个根据 GPLv2 许可的版本)。

于 2009-10-11T17:41:53.937 回答