clang 和 clang-mp-3.3(3.2 或 3.4)有什么区别?

问题描述 投票:0回答:2

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

我尝试安装 clang。尝试安装 clang 后,我最终得到了两个 clang。 一个是 /usr/bin/clang 或 clang++ ,另一个是 /opt/local/bin/clang-mp-3.3 或 clang++-mp-3.3 (我从 macport 安装的)

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

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

compiler-construction clang macports
2个回答
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 是基于 llvm 在 2013 年中期到 2014 年初从主干分支出来的修订版。

我也不明白你所说的“macport clang 更接近 gcc”是什么意思。这似乎没有任何意义,但我可能会误解。 AFAIK,Apple 的 clang 与主线 clang 相当接近。他们有自己的版本,基于未知的修订版,但仍然如此。

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

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


0
投票

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

也许你更喜欢我的回答:
https://stackoverflow.com/a/77404955/15809

简而言之,区别在于 Apple 有一个自己的 LLVM 项目分支,并且它们随 Xcode 一起提供的 clang 构建都来自该分支,它可以使用自定义构建设置、禁用/启用某些可选功能,甚至可能包含自定义代码补丁和系统采用。因此,虽然 Apple 的 clang 的核心是基于 LLVM clang,但它可能包含采用更好的 macOS 系统或 Xcode IDE 集成。

您使用 MacPorts 获得的构建是根据 LLVM 存储库制作的,不包含任何 Apple 特定采用的内容,除非这些内容已合并回原始 LLVM 存储库。 MacPorts 还提供了更多前沿的构建。例如。当前的 Xcode 15 Beta 2(甚至不是最终版)发布的 clang 版本仍然基于 LLVM 16,而当前的 LLVM 版本是 LLVM 17,LLVM 18 已经在地平线上可见,并且可以通过安装来预览

clang-devel
在 MacPorts 中。

© www.soinside.com 2019 - 2024. All rights reserved.