Xcode MacOS与clang c++版本关系

2023-11-11

关于clang

https://en.wikipedia.org/wiki/Clang

7 September 2017 Clang 5.0.0 released
19 January 2018 Clang becomes default compiler in OpenBSD 6.3 on arm.[54]
5 March 2018 Clang is now used to build Google Chrome for Windows.[55]
8 March 2018 Clang 6.0.0 released
5 September 2018 Clang is now used to build Firefox for Windows.[56]
19 September 2018 Clang 7.0.0 released
20 March 2019 Clang 8.0.0 released
1 July 2019 Clang becomes default compiler in OpenBSD 6.6 on mips64.[57]
19 September 2019 Clang 9.0.0 released with official RISC-V target support.[58]
29 February 2020 Clang becomes the only C compiler in the FreeBSD base system, with the removal of GCC.[59]
24 March 2020 Clang 10.0.0 released
2 April 2020 Clang becomes default compiler in OpenBSD 6.7 on powerpc.[60]
12 October 2020 Clang 11.0.0 released
21 December 2020 Clang becomes default compiler in OpenBSD 6.9 on mips64el.[61]
14 April 2021 Clang 12.0.0 released
4 October 2021 Clang 13.0.0 released
25 March 2022 Clang 14.0.0 released

 关于LLVM

在 Xcode 中,LLVM 编译器使用 Clang 前端(LLVM.org 上基于 C 的语言项目)来解析源代码并将其转换为临时格式。然后 LLVM 代码生成层(后端)将该临时格式转换为最终的机器代码。Xcode 还包括 LLVM GCC 编译器,它使用 GCC 编译器前端以获得最大的兼容性,以及 LLVM 后端,它利用 LLVM 的高级代码生成器。这显示了基于库的编译器开发方法的灵活性。由于采用 LLVM,Xcode 还可以使用许多其他功能,例如链接时间优化、更详细的诊断信息,甚至静态分析。

LLVM Compiler Overview

The LLVM Compiler Infrastructure Project

Download LLVM releases

 

C++ Support in Clang

Clang - C++ Programming Language Status

Clang implements the following published and upcoming ISO C++ standards:

Language Standard Flag Available in Clang?
C++98 / C++03 -std=c++98 Yes (other than export)
C++11 -std=c++11 Clang 3.3
C++14 -std=c++14 Clang 3.4
C++17 -std=c++17 Clang 5
C++20 -std=c++20 Partial
C++2b (tentatively C++23) -std=c++2b Partial

apple clang

It's just that Apple Clang and LLVM Clang use different release cycles. So one release 13.0 is not the same as the other release 13.0...

You can compare them here

Compiler support for C++20 - cppreference.com

 Compiler support for C++20

Compiler support for C++20 - cppreference.com

 C++ 编译器支持

C++ compiler support - cppreference.com

 Xcode与clang版本关系

Xcode clang version record · GitHub

https://en.wikipedia.org/wiki/Xcode#Toolchain_versions

macOS 系统与Xcode版本关系概览

XcodeVersionInfo – MacPorts

Xcode Release Notes Clang相关更新

Apple Developer Documentation

Xcode 13

Apple clang version 13.0.0 (clang-1300.0.29.3)
包括适用于 iOS 15、iPadOS 15、tvOS 15、watchOS 8 和 macOS Big Sur 11.3 的 SDK。Xcode 13 版本支持 iOS 9 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。
Xcode 13 需要运行 macOS 11.3 或更高版本的 Mac。

  • 您现在可以在 Xcode 的构建设置中配置C++20GNU++20C++ 语言方言。(50900425)

  • clang 现在支持 C++20 似然属性[[likely]][[unlikely]]. (78316737)

  • 修复了在问题导航器中单击警告或错误时无法导航到关联的 C 或 C++ 文件的问题。(73582669) (FB8981116)

Xcode 13.3

Apple clang version 13.1.6 (clang-1316.0.21.2)

包括适用于 iOS 15.4、iPadOS 15.4、tvOS 15.4、watchOS 8.5 和 macOS Monterey 12.3 的 SDK。Xcode 13.3 版本支持 iOS 15.4、iPadOS 15.4、tvOS 15.4、watchOS 8.5 及更高版本的设备上调试。Xcode 13.3 需要运行 macOS Monterey 12 或更高版本的 Mac。

新功能

  • 已经实现了几篇 C++20 和 C++2b 论文:

    • using声明现在可用于枚举、枚举类及其成员。

    • 编译器可以根据新的文字后缀 ( , ) 推导出和类型,例如。size_tssize_tuzzfor (auto i = 0uz; i < vector.size(); ++i) {}

    • 如果 lambda 声明不带参数,现在可以在包括可变 lambda 在内的所有上下文中省略左括号和右括号 ()。

    • 编译器现在允许重复属性。

    • 后面的任何尾随空格\都不重要。

    • 具有不同编码前缀的字符串文字的串联现在是格式错误的,例如auto s = L"" U"";. (89022082)

已解决的问题

  • Clang 现在遵循 C++ 标准的要求。因此,编译器可以删除无限循环而不会产生副作用。如果您的代码具有无限循环而编译器必须保留的可观察到的副作用,请考虑使用。(84717970)[intro.progress]-fno-finite-loops

  • 修复了在构建包含非 ASCII 字符的文件路径的项目时发生的崩溃。(83694706)

  • Xcode 不再传递-stdlib=libstdc++给 Clang,因为 Clang 在 Apple 平台上不再支持该库。如果您的项目定义了构建设置,请将其删除,因为它不再执行任何操作。(83768231)CLANG_CXX_LIBRARY

Xcode 12.5

Apple clang version 12.0.5 (clang-1205.0.22.9)

包括适用于 iOS 14.5、iPadOS 14.5、tvOS 14.5、watchOS 7.4 和 macOS Big Sur 11.3 的 SDK。Xcode 12.5 版本支持 iOS 9 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 12.5 需要运行 macOS Big Sur 11 或更高版本的 Mac。

新功能

  • libc++ 不再支持宏。改用包装的迭代器。(63088925)_LIBCPP_RAW_ITERATORS

  • Clang 现在从方法+new上的可用性注释中推断出可用性-init。由于 +new 调用 [[Foo alloc] init], +new 除非可用,否则 +init 不可用。(75884815)

  • 在使用 libc++ 调试 C++ 程序时,LLDB 现在为 STL 容器和算法提供改进的表达式评估支持。(19866497)

    • 您可以调用 STL 容器的成员函数,即使它们从未在目标程序中被调用。

    • LLDB 可以从标准库中实例化模板函数。这包括诸如、、等算法。std::sortstd::countstd::count_if

Xcode 11

Apple clang version 11.0.0 (clang-1100.0.33.8)

可在 Mac App Store 中获得,包括适用于 iOS 13、macOS Catalina 10.15、watchOS 6 和 tvOS 13 的 SDK。Xcode 11 支持对运行 iOS 13.1 的设备进行开发。Xcode 11 支持 iOS 8 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 11 需要运行 macOS Mojave 10.14.4 或更高版本的 Mac。

  • Clang 现在提供了一种控制退出时间析构函数注册的机制。您可以使用 flag 全局禁用这些-fno-c++-static-destructors,或应用该属性来禁用特定变量的析构函数。还添加了该属性以在使用时启用特定变量的析构函数。(21734598)[[clang::no_destroy]][[clang::always_destroy]]-fno-c++-static-destructors

  • 作为扩展,现在所有语言模式都支持具有固定基础类型的 C++11 枚举。(43831380)

  • 当使用活动标准版本中已弃用的标准库设施时,将发出弃用警告。(46881474)

  • 默认情况下,堆栈检查在所有平台上都是打开的,以防止内存损坏。(25859140)

Xcode 11.5

Apple clang version 11.0.3 (clang-1103.0.32.62)

可在 Mac App Store 中获取,包括适用于 iOS 13.5、iPadOS 13.5、tvOS 13.4、watchOS 6.2 和 macOS Catalina 10.15.4 的 SDK。Xcode 11.5 版本支持 iOS 8 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 11.5 需要运行 macOS Catalina 10.15.2 或更高版本的 Mac。

已解决的问题

  • 修复了针对 armv7 设备时代码生成不正确的问题。(61901594)

Xcode 10

Apple LLVM version 10.0.0 (clang-1000.11.45.2)

已在 Mac App Store 中提供,包括适用于 iOS 12、watchOS 5、macOS 10.14 和 tvOS 12 的 SDK。Xcode 10 支持 iOS 8 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 10 需要运行 macOS 10.13.6 或更高版本的 Mac。

新功能

  • Xcode 10 增加了对 C++17 头文件<any><optional><variant>. (39271859)

已解决的问题

  • Clang 现在可以正确处理可能影响代码完成支持的无效 Objective-C 属性。(33761186)

弃用

  • 使用 libstdc++ 构建已在 Xcode 8 中弃用,并且在针对 iOS 时在 Xcode 10 中不受支持。C++ 项目现在必须迁移到 libc++,并且建议将部署目标设置为 macOS 10.9 或更高版本,或者 iOS 7 或更高版本。除了更改 C++ 标准库构建设置外,开发人员还应审核硬编码的链接器标志和目标依赖项以删除对 libstdc++ 的引用(包括 -lstdc++、-lstdc++.6.0.9、libstdc++.6.0.9.tbd 和 libstdc++.6.0。 9.dylib)。项目依赖项(例如针对 libstdc++ 构建的静态档案)也需要针对 libc++ 重新构建。(40885260)

  • Libgcc 已过时。Xcode 10 无法再构建部署目标为 macOS 10.4 和 10.5 的应用程序。(42818150, 38035243)

Xcode 10.2

Apple LLVM version 10.0.1 (clang-1001.0.46.3)

包括适用于 iOS 12.2、watchOS 5.2、macOS 10.14.4 和 tvOS 12.2 的 SDK。Xcode 10.2 支持 iOS 8 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 10.2 需要运行 macOS 10.14.3 或更高版本的 Mac。

新功能

  • -Watomic-implicit-seq-cst是一个新警告,默认关闭,当 C_Atomic或与隐式、顺序一致的排序一起使用时发出警告。大多数代码库默认使用顺序一致性,但有些要求开发人员在任何地方都使用显式排序。此警告适用于后一组。(28172966)__sync_*

  • 新的诊断识别使用引号包含而不是框架样式包含的框架标头。默认情况下警告是关闭的,但您可以通过传递-Wquoted-include-in-framework-header来启用它clang。(37077034)

  • -Wmemset-transposed-args是一个新警告,用于诊断memset对第二个和第三个参数转置的调用。例如,以下调用被诊断为带有新警告:memset(buf, sizeof(buf), 0). (42360478)

  • 的构造函数现在根据其成员的相应构造函数是否为. 这是一个符合标准的扩展,它具有潜在的性能优势,以防对于不会在构造时抛出异常的类型进行更快的操作。(29537079)std::pairnoexceptnoexcept

  • 在 a或 a中使用非常量可调用谓词的警告现在显示了错误容器的实例化点,而不是不相关的实现细节。(41370747)std::mapstd::set

  • <experimental/any>和标<experimental/optional>头已被弃用,取而代之的是它们的 C++17 对应标头:<any><optional>. 它们将在 Xcode 的未来版本中删除,您不应依赖它们的存在。(46903112)

  • 已删除使用内联宏来控制 libc++ 标头中符号的可见性,以提供更好的解决方案。这应该会导致包含 libc++ 标头的代码的代码大小和性能得到改进,并在使用 libc++ 时显着改进调试体验。(47259325)

  • 框架中的公共标头可能会错误地#import#include私有标头,这会导致分层违规和潜在的模块循环。有一个报告此类违规行为的新诊断程序。OFF默认情况下,它clang-Wframework-include-private-from-public 标志控制。(38712182)

  • 在框架中使用@import标头可防止在没有模块的情况下使用标头。当您传递标志时,新的诊断会检测@import框架头文件的使用。-fmodules诊断OFF默认情况下clang使用-Watimport-in-framework-header标志进行控制。(39192894)

  • 以前,在为框架声明模块时省略framework关键字不会影响编译,但会默默地做错事。一个新的诊断,-Wincomplete-framework-module-declaration和一个新的修复——它建议添加适当的关键字。当您将-fmodules标志传递给clang. (39193062)

已解决的问题

  • 静态分析器现在会在 C++ 对象在其内容被移动后被使用时发出警告,除非该对象在使用前被重置为已知状态。(41349073)

  • 静态分析器现在检查是否违反了 IOKit 和 libkern 引用计数规则。这些违规行为可能导致泄漏和释放后使用问题。(46359592)

 Clang 14.0.0 Release Notes

Clang 14.0.0 Release Notes — Clang 14.0.0 documentation

Clang 15.0.0git documentation

Clang 15.0.0git documentation

“libc++” C++ Standard Library 

“libc++” C++ Standard Library — libc++ 15.0.0git documentation

Libc++ aims to support common compilers that implement the C++11 Standard. In order to strike a good balance between stability for users and maintenance cost, testing coverage and development velocity, libc++ drops support for older compilers as newer ones are released.

Compiler Versions Restrictions Support policy
Clang 13, 14 latest two stable releases per LLVM’s release page
AppleClang 13 latest stable release per Xcode’s release page
Open XL 17.1 (AIX) latest stable release per Open XL’s documentation page
GCC 11 In C++11 or later only latest stable release per GCC’s release page

Libc++ also supports common platforms and architectures:

Target platform Target architecture Notes
macOS 10.9+ i386, x86_64, arm64 Building the shared library itself requires targetting macOS 10.11+
FreeBSD 10+ i386, x86_64, arm
Linux i386, x86_64, arm, arm64
Windows i386, x86_64 Both MSVC and MinGW style environments
AIX powerpc, powerpc64

关于Clang

Clang Compiler User's Manual

Clang - Getting Started

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xcode MacOS与clang c++版本关系 的相关文章

随机推荐

  • NSI45025AT1G 25mA 45V LED驱动器,恒流调节器 工业指示灯、背光灯解决方案

    NSI45025AT1G是一款线性恒流调节器是一种简单 经济和稳健的装置 旨在为LED 类似于恒流二极管 CCD 中的电流调节提供一种成本有效的解决方案 恒流调节器基于自偏置晶体管 SBT 技术 在宽电压范围内调节电流 具有负温度系数 以保
  • 第一章 红绿灯数据采集

    第一章 红绿灯数据采集 华为hilens主控 AI实现自主导航和红绿灯控制 总章目录 第一章 Hilens红绿灯数据采集 第二章 ModelArts数据处理 第三章 ModelArts模型训练 第四章 ModelArts模型转换 第五章 H
  • 国内各大互联网公司技术团队站点

    利用闲暇时间整理了一份国内各大互联网公司的相关技术站点 希望能够对大家有所帮助 也欢迎各位帮忙补充 1 腾讯系列 名称 地址 财付通设计中心TID 地址 fitdesign tencent com QQ邮箱博客 地址 blog mail q
  • 使用linux服务器相关命令

    最近需要在云GPU服务器上跑模型 初次接触这样的形式 因此记录一下比较常用的命令 一 ssh登陆指令 1 常见登陆方式 ssh 用户名 服务器ip 2 有端口号和用户名的登陆方式 ssh l 用户名 服务器ip p 端口号 二 scp指令
  • git push遇到503错误的解决方案:The requested URL returned error: 503

    git remote set url origin https your user name github com your user name your project name git 参考了这个blog https www shuiz
  • 球谐函数在环境光照中的使用原理

    在三维空间中如何对场景光照进行球谐函数展开 图形学论文解析与复现 Spherical Harmonic Lighting The Gritty Details 首先 对场景中某像素点的漫反射光照进行计算 L p w
  • 机房 机柜的保养 和清理

    https www linuxprobe com clear idc html
  • 取消Allegro的PCB文件在Drill Legend后产生的过孔标注的方法

    在cadence的PCB编辑完成后 Drill Legend生产钻孔说明表 程序会自动加上钻孔的标注 如图 给后续的再次编辑带来困扰 关闭方法 关闭图层Manufacturing gt Ncdrill Figure即可关闭钻孔标注
  • float取小数点后几位_float类型的存储方式

    在c语言中float函数是单精度的 它在内存中以二进制的形式存储 分为符号位 阶码与尾数三部分 符号位最为简单 如果你存储的是正数那么符号数就是0 如果是负数 则为1 下面 我以13 625为例说明阶码与尾数的表示方法 首先 我们取出13
  • 深入理解程序设计使用linux汇编语言(一)

    在编译运行第四章power函数遇到报错 报错信息Invalid SP address 0xffffdf2c 通过gdb定位到程序 gt 0x40007e
  • mysql数据库,oracle数据库中对字段的拼接方法

    mysql数据库 oracle数据库中对字段的拼接方法 1 简介 在日常开发中 常常有将多个字段拼接进行sql操作的场景 比如做模糊查询 我这里分两种环境阐述 1 在数据库中的写法 2 在mybatis或mybatisplus中的写法 2
  • Matlab绘图-详细全面(图)

    Matlab绘图 强大的绘图功能是Matlab的特点之一 Matlab提供了一系列的绘图函数 用户不需要过多的考虑绘图的细节 只需要给出一些基本参数就能得到所需图形 这类函数称为高层绘图函数 此外 Matlab还提供了直接对图形句柄进行操作
  • 自动驾驶(五十三)---------浅析深度学习与自动驾驶

    之前有分析过深度学习和自动驾驶的关系 但是主要是在视觉的基础上来分析的 连接 这里想从各个角度来分析深度学习在自动驾驶中的应用 如果你正好有这方面的需要 不妨选择一个着力点 笔者从事自动驾驶3年来 也处于瓶颈期 需要在一个特定的领域深挖 这
  • 华为OD机试真题-最大花费金额-2023年OD统一考试(B卷)

    题目描述 双十一众多商品进行打折销售 小明想购买自己心仪的一些物品 但由于受购买资金限制 所以他决定从众多心仪商品中购买三件 而且想尽可能的花完资金 现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额 输入描述 输入第一行为一维整型数
  • 区块链技术生态的设计

    区块链技术生态的设计 详见 区块链技术生态
  • String-字符串替换

    例子 原始字符串 String demo aback 文章目录 一 replace 字符或者字符串替换 1 使用方法 2 源码 二 replaceAll 多个正则替换 1 使用方法 2 源码 三 replaceFirst 首次出现替换 1
  • 移动端兼容宝典大全,专治各种不适

    古人学问遗无力 少壮功夫老始成 移动端兼容宝典大全 专治各种不适 你是否也曾为浏览器各种的不兼容而苦恼 尤其是IE这个牛皮癣 这篇文章可能会给你帮助哦 常码字不易 出精品更难 没有特别幸运 那么请先特别努力 别因为懒惰而失败 还矫情地将原因
  • 小程序调整文章正文样式:

    1 官网地址 npm install github markdown css 2 案例 右键 gt 另存为 gt 导入 使用css文件 引入的css已markdown body的class名开头 适配时禁止github markdown转换
  • Openlayers API-Select点击要素图层

    Select是交互事件中的一种 用于选择矢量图层上的几何图形 添加选择交互事件后 点击地图上的几何图形或者将鼠标移动到几何图形上时 将获取到几何图形的相关信息 我们可以将选择的几何图形进行高亮显示 使用起来很简单 首先创建一个Select对
  • Xcode MacOS与clang c++版本关系

    关于clang https en wikipedia org wiki Clang 7 September 2017 Clang 5 0 0 released 19 January 2018 Clang becomes default co