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

Posted

技术标签:

【中文标题】在mac上编译C++11代码?【英文标题】:Compile C++11 code on mac? 【发布时间】:2013-06-22 04:53:20 【问题描述】:

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

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

它有效,但我的问题是:

    是否可以将这些标志设置为 clang++ 的默认值? 如何将 g++ 4.2 更新到支持 C++11 的版本? 您认为哪种方式在 mac 上编译 C++11 代码最好?

谢谢。

【问题讨论】:

“是否可以将这些标志设置为 clang++ 的默认值?” - 你不能把这个标志添加到 IDE 中的项目选项中 / CMake / 任何其他构建系统配置文件代替? 那么你的空指针是怎么回事? 【参考方案1】:

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

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

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

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

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

【讨论】:

我只是懒得尝试 Homebrew。最近让我烦恼的关于 MacPorts 的一件事是,尽管设置正确、最新的 Xcode 等,但在许多情况下无法从源代码安装(构建)端口。 h-online.com/open/news/item/… @manasij7479 那条新闻是错误的,我的回答已经包含了原因。 编译器可能功能完整,但它们的标准库实现不完整。 好的..所以请给我一些不起作用的 代码?我记得尝试过简单的教程,一切正常。 @manasij7479 你一定记错了。没有任何效果,即使是最小的例子:coliru.stacked-crooked.com/…,GCC 网站也非常明确地说:gcc.gnu.org/onlinedocs/libstdc++/manual/…【参考方案2】:

在 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" 会将其设为默认 gccg++ 等。

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

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

【讨论】:

【参考方案3】:

答案:

    我不这么认为 您在 4.2 旁边安装了另一个 g++ 版本,删除系统附带的那个是不好的因果报应。要安装一个新的,请检查this clang 也是如此。可以here下载。

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

【讨论】:

@KonradRudolph 对!但是,您的解决方案看起来并不像在某处为 c++ 编译器设置系统范围的配置设置那样万无一失,这对于 需要 编译的糟糕遗留程序来说也是一个非常糟糕的主意没有 C++ 11(为什么会发生这种情况?)。所以,我对任何人的工作建议都是“不要偷懒,不要介意旗帜”。 Stack Overflow 上 Lounge 聊天室的人想和你谈谈。事实上,稍加注意将标志设置为默认值不是问题。如果您正在编译旧版软件,您可以简单地重置相关的环境变量。【参考方案4】:

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

【讨论】:

以上是关于在mac上编译C++11代码?的主要内容,如果未能解决你的问题,请参考以下文章

在Mac OSX上编译NASM

C++ 在 Mac OS X 上编译代码并在 Linux x86 上运行

在 Apple Mac 服务器上编译 Objective-C [关闭]

Mac上编译C++报错

在windows上用CodeBlocks+MinGW+WxWidgets开发的程序,是不是可以在Linux和Mac上编译

mac上编译安装php