在mac上编译C ++ 11代码?

时间:2013-06-22 04:53:20

标签: c++ c++11

我是C ++ 11的新手。我试过了:

clang++ -std=c++11 -stdlib=libc++ *.cc

它有效,但我的问题是:

  1. 无论如何将这些标志设置为clang ++的默认值?
  2. 如何将g ++ 4.2更新为支持C ++ 11的版本?
  3. 您认为哪种方式最好在Mac上编译C ++ 11代码?
  4. 感谢。

4 个答案:

答案 0 :(得分:6)

Brett描述了如何使用MacPorts安装GCC。以下是使用Homebrew的方法,它将自己的样式(正确!)作为MacPorts的现代替代品:

brew tap homebrew/versions
brew install --enable-cxx gcc48

据我所知,安装最新Clang的最简单方法是下载在dsign的答案中链接的编译版本 - 正如Brett所说,由于Apple在内部使用clang,因此不建议修改安装 - 只需要你的其他地方。

关于“最佳”编译器是什么,除了Brett已经说过的话,还有两件事需要考虑:

  1. GCC比Clang更老,更成熟。 Clang中偶尔会发生内部编译器错误。也就是说,它正在迅速成熟,因为它被几家公司推动。
  2. Clang是C ++ 11的完整功能,GCC 4.8 is not。一个非常明显的例子就是GCC 4.8仍然没有工作<regex>的实现,这是一种耻辱。

答案 1 :(得分:5)

在IDE之外(例如,在shell中),我通常在CXX / "clang -std=c++11 -stdlib=libc++" /等中将变量.profile设置为:.tcshrc,因为这也被大多数配置脚本选中。在cmd行上,我可能会使用:$CXX -c foo.cc

MacPorts gcc-4.8.1效果很好:"[sudo] port install gcc48 [-universal]"

"[sudo] port select --set gcc gcc48"会将其设为默认gccg++等。

请勿尝试更新或修改系统工具,例如Xcode附带的旧gcc-4.2 / llvm混合。

我不知道你在问题的第3部分中的'最佳'方式是什么意思,但是在Apple的支持下(他们雇用了LLVM的主要作者),以及FreeBSD等其他项目,clang只会继续改善。它已经很多比gcc更快,有更好的错误消息/诊断(特别是对于C ++和模板),以及模块化架构。对于OS X,它是明确的选择。

答案 2 :(得分:1)

数目:

  1. 我不这么认为
  2. 你在4.2旁边安装另一个g ++版本,删除系统附带的那个是不好的业力。要安装新的,请检查this
  3. 同样适用于clang。您可以下载here
  4. 一般来说,我完全建议你得到更好的g ++编译器,4.2很老,而且代码质量不太好。使用c ++ 11是完全值得的。

答案 3 :(得分:1)

像大多数Apple开发人员一样,在Xcode的构建设置中完成所有操作。 Xcode以多种方式简化了生活。