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 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 头文件. (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

  • 和标头已被弃用,取而代之的是它们的 C++17 对应标头:. 它们将在 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

你可能感兴趣的:(MACOS开发笔记,C/C++进阶,xcode,macos,c++)