Xcode 3.2.1 GCC CLANG和LLVM去神秘化

slf*_*slf 39 iphone xcode gcc llvm clang

本周新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.

我们公司现有的项目是纯C,Objective-C和Objective-C++,适用于台式机和iphone.有人可以在高层次上总结LLVM,GCC,CLANG,CLANG-LLVM,WordFoo等的差异.人.并解释它们是什么以及我们何时应该使用它们以及用于什么?链接到更详细的解释会很好,但我真的只是在寻找一个高级概述.

d0k*_*d0k 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的项目设置中启用).它们可能产生更快的代码.

Apple希望将来用GCC代替GCC,因为他们有针对GPLv3许可代码的政策(GCC 4.2是根据GPLv2许可的最后一个版本).