Can I use C++11 with Xcode?
我正在考虑在一些跨平台项目(Windows + Mac)中使用一些C ++ 11功能(例如auto)。 在Windows上,Visual Studio支持即将推出的C ++ 11标准的部分内容,这些内容允许我简化部分代码库,因此我很自然地会对开始使用这些功能感兴趣。
但据我所知,目前的XCode版本(3.2.4 + GCC 4.2)根本不支持任何C ++ 11功能。 我可以以某种方式升级GCC版本或CLang版本吗? 或者,我是否应该咬紧牙关,等待Apple将来某个时候打包新版本?
- 看看这里和那里的答案。
- 要获得更积极的结果,请查看:stackoverflow.com/questions/837992/update-gcc-on-osx
- 优秀的链接!
- 关于Clang:我相信它最近获得了合理的C ++ 03支持,但C ++ 0x仍然是一个很远的目标。 例如,对可变参数模板的支持正在进行中,并且尚未实现移动语义/右值引用。
- Variadic模板对我来说很好用clang。
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++选项怎么样? 什么时候使用它们?
- 我看过DeveloperAbout\ 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支持失败的原因(因为古老的g++ XCode让你不支持它)。 仅供参考。
- 我仍然得到nullptr_t错误:-(
======= 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编写和维护你的编译器插件。
你也可以指定自定义脚本,但这很难维护......除非你全力以赴创建一个适配器工具。
Xcode使用GCC或Clang C ++编译器。这些编译器支持的任何功能都是公平游戏。 GCC的C ++兼容性页面在这里,Clang C ++兼容性页面就在这里。
- 是的,但海湾合作委员会的支持在4.2处停止,这开始变得有点长
我发现auto,decltype(),基于范围的"for(:)"在跨平台项目中工作(适用于MacOSX,iOS,gcc / linux,MSVC 10 / windows的LLVM)。
Lambda和可变参数宏似乎在LLVM下不能正常工作。
- MSVC 10和11不支持基于范围的。 另一方面,Clang确实支持可变参数模板。