5

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

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

它有效,但我的问题是:

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

谢谢。

4

4 回答 4

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. C++ 11 的 Clang 功能完整,GCC 4.8 不完整。一个非常明显的例子是 GCC 4.8 仍然没有有效<regex>的实现,这是一种耻辱。
于 2013-06-22T14:48:44.287 回答
5

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

MacPorts gcc-4.8.1 运行良好:"[sudo] port install gcc48 [-universal]"

"[sudo] port select --set gcc gcc48"将使其成为默认值gcc,g++等。

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

我不知道您在问题的第三部分中所说的“最佳”方式是什么意思,但是在 Apple 的支持下(他们聘请了 LLVM 的主要作者)以及背后的 FreeBSD 等其他项目,clang 只会继续改进。它已经比 gcc快得多,具有更好的错误消息/诊断(尤其是对于 C++ 和模板),以及模块化架构。对于 OS X,这是明确的选择。

于 2013-06-22T13:10:28.047 回答
1

答案:

  1. 我不这么认为
  2. 您在 4.2 旁边安装了另一个 g++ 版本,删除系统附带的那个是不好的因果报应。要安装一个新的,检查这个
  3. 铿锵声也一样。你可以在这里下载。

总的来说,我完全建议你使用更好的 g++ 编译器,4.2 已经很老了,而且它的代码质量也没有那么好。使用 c++ 11 是完全值得的。

于 2013-06-22T05:54:12.330 回答
1

像大多数 Apple 开发人员一样,在 Xcode 的构建设置中完成这一切。Xcode 在许多方面简化了生活。

于 2013-06-22T16:11:10.243 回答