4

有类似的问题,我对答案不满意。

我尝试安装clang。在尝试安装铿锵声后,我得到了两个铿锵声。一个是 /usr/bin/clang 或 clang++ 和其他 /opt/local/bin/clang-mp-3.3 或 clang++-mp-3.3 (我从 macport 安装的)

当我编译简单程序时它们的行为相同,但当我尝试编译其他大而复杂的 C++ 代码时它们的行为不同。我尝试阅读文档以获得一些概述。

从这张票我可以知道 macport clang 更接近 gcc。我知道 clang 做前端工作(作为 c 类型语言解释器),而 llvm 是后端。首先是什么以及如何产生差异?感谢您的时间。

4

1 回答 1

1

TL;DR:如果它们在 llvm 版本方面足够接近,它们的行为应该相似(可能在其中一个上添加了优化/功能)。但是没有任何信息可以用来找出你的意思。

从我从Portfile中看到的, {llvm,clang}-3.4 端口(以及其他类似的,我假设)安装了一个普通的 llvm 和/或 clang。

例如:最新发布的 Xcode 自带:

Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.2.0
Thread model: posix

Apple 没有告诉我们具体的修订号,但我们知道他们的私人 clang 是基于 2013 年中至 2014 年初之间从主干分支出来的 llvm 的修订。

我也不明白您所说的“macport clang 更接近 gcc”是什么意思。这似乎没有任何意义,但我可能会误解。Apple 的 clang 非常接近主线 clang,AFAIK。他们有他们的版本,这些版本基于一个未知的修订版,但仍然存在。

Clang 是llvm 项目C 前端。它由 llvm 社区指导,所有(公共)工作都发生在主 llvm 存储库(在 clang 的目录上)。但是您仍然可以在没有 clang 的情况下安装 llvm,或者在没有(大部分?)其他 llvm 实用程序的情况下安装 clang。这就是为什么你在 macports 上有单独的 clang 和 llvm 包的原因。

你为什么说他们的行为不同,他们的行为有多大不同?您是否使用相同的选项进行编译?哪个?它们是否都来自同一个版本,例如 3.3 和 3.3svn(这仅意味着它们之间最多有大约 6 个月的时间,这不会使它们成为完全相同的版本)?

于 2014-06-12T05:14:03.743 回答