我可以在 Xcode 中使用 C++11 吗?
Posted
技术标签:
【中文标题】我可以在 Xcode 中使用 C++11 吗?【英文标题】:Can I use C++11 with Xcode? 【发布时间】:2011-06-02 05:37:42 【问题描述】:我正在考虑在一些跨平台项目 (Windows+Mac) 中使用一些 C++11 功能(例如 auto
)。在 Windows 上,Visual Studio 支持即将推出的 C++11 标准的一部分,这将使我能够简化部分代码库,因此我自然会对开始使用这些功能感兴趣。
但据我所知,当前的 XCode 版本(3.2.4 + GCC 4.2)根本不支持任何 C++11 功能。我可以以某种方式升级 GCC 版本或 CLang 版本吗?还是我应该咬紧牙关,等待苹果将来某个时候打包新版本?
【问题讨论】:
看答案here和there。 要获得更积极的结果,请查看:***.com/questions/837992/update-gcc-on-osx 关于 Clang:我相信它最近实现了对 C++03 的合理支持,但 C++0x 仍然是一个遥远的目标。例如,可变参数模板的支持正在进行中,移动语义/右值引用尚未实现。 可变参数模板对我来说适用于 clang。 【参考方案1】:Xcode 4.2 终于增加了对 C++0X 的支持:
在项目构建设置屏幕中,打开“全部”选项。
在“构建选项”部分,将编译器设置为“Apple LLVM 编译器 3.0”。
向下滚动到“Apple LLVM Compiler 3.0 - 语言”部分,将“C++ 语言方言”设置为“C++0X”,将“C++ 标准库”设置为“libc++”。
已知 std::move()、移动构造函数和 R-Value 引用按预期工作,我正在 std::thread 和 std::atomic 上进行测试。
【讨论】:
@RichardLiu,C++ Language Dialect
的GNU++0X
选项和C++ Standard Library
的libstdc++
选项怎么样?什么时候使用?
我查看了/Developer/About\ Xcode.pdf
,是的,它说支持C++11,但是当我使用-std=gnu++0x
时,它会吐出cc1plus: error: unrecognized command line option "-std=0x++"
!我应该改用clang++
吗?
@errordeveloper,到目前为止,我只在 Xcode IDE 中成功编译了 C++11。我不知道如何在命令行或 makefile 中启用 C++11。对不起。
@RichardLiu:XCode 在编译时通常使用clang++
,而不是g++
,这就是为什么尝试从命令行使用g++
时C++11 支持失败的原因(因为古老的@ 987654332@XCode 给你不支持)。仅供参考。【参考方案2】:
======= 2012 年更新:=======
从 Clang 开始 - Clang 现在提供了许多 C++11 功能。它包含在 Xcode 中。
======= 2011 年 1 月的原始答案:=======
intel 的编译器可能是目前最简洁的方法。 http://software.intel.com/en-us/articles/intel-composer-xe/
clang 很有前途,但不是特别稳定或具有 wrt c++0x 特性。 c++ 对于 clang 来说还是很新的。
gcc:相对成熟,但你必须为 xcode 编写和维护你的编译器插件。
您还可以指定自定义脚本,但维护起来很麻烦...除非您全力以赴并创建一个适配器工具。
【讨论】:
【参考方案3】:Xcode 使用 GCC 或 Clang C++ 编译器。这些编译器支持的任何功能都是公平的游戏。 GCC 的 C++ 兼容性页面是here,Clang C++ 兼容性页面是here。
【讨论】:
是的,但 GCC 支持在 4.2 停止,这开始有点长了【参考方案4】:我发现 auto、decltype()、基于范围的“for (:)”在跨平台项目(LLVM for MacOSX、ios、gcc/linux、MSVC 10/windows)中工作。
可悲的是,lambdas 和可变参数宏似乎还不能在 LLVM 下工作。
【讨论】:
MSVC 10 和 11 不支持基于范围的 for。另一方面,Clang 确实支持可变参数模板就好了。以上是关于我可以在 Xcode 中使用 C++11 吗?的主要内容,如果未能解决你的问题,请参考以下文章
有人可以帮我修复这个 Xcode 的 UICollection 吗?
核心数据迁移 - 我们可以在 xcode 中有多个 .xcmapingmodel 文件吗?
使用 makefile 在 Xcode 4 中运行 C 程序