在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 那条新闻是错误的,我的回答已经包含了原因。 编译器可能功能完整,但它们的标准库实现不完整。 好的..所以请给我一些不起作用的在 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,这是明确的选择。
【讨论】:
【参考方案3】:答案:
-
我不这么认为
您在 4.2 旁边安装了另一个 g++ 版本,删除系统附带的那个是不好的因果报应。要安装一个新的,请检查this
clang 也是如此。可以here下载。
总的来说,我完全推荐你使用更好的 g++ 编译器,4.2 已经很老了,而且它的代码质量也不是很好。使用 c++ 11 是完全值得的。
【讨论】:
@KonradRudolph 对!但是,您的解决方案看起来并不像在某处为 c++ 编译器设置系统范围的配置设置那样万无一失,这对于 需要 编译的糟糕遗留程序来说也是一个非常糟糕的主意没有 C++ 11(为什么会发生这种情况?)。所以,我对任何人的工作建议都是“不要偷懒,不要介意旗帜”。 Stack Overflow 上 Lounge像大多数 Apple 开发人员一样,在 Xcode 的构建设置中完成这一切。 Xcode 在许多方面简化了生活。
【讨论】:
以上是关于在mac上编译C++11代码?的主要内容,如果未能解决你的问题,请参考以下文章
C++ 在 Mac OS X 上编译代码并在 Linux x86 上运行
在 Apple Mac 服务器上编译 Objective-C [关闭]
在windows上用CodeBlocks+MinGW+WxWidgets开发的程序,是不是可以在Linux和Mac上编译