1

有没有人得到关于如何让 C++11 在 OS X 山狮下使用 SublimeClang 的说明。

如果我使用非 C++11 库和代码,它会很高兴,但是一旦我尝试使用 std::shared_ptr 之类的东西,它就会呻吟。

我显然错过了一些简单的东西,任何帮助将不胜感激。

我也将附加选项设置为 -std=c++11 所以我真的不知道我错过了什么。

布莱尔

4

2 回答 2

2

可能为时已晚,但我找到了方法。这件事是因为clang使用gcc-4.2的头文件,它很老,不支持C++ 11。

要完成 C++11 代码,您必须获取更新的 gcc 并复制它使用的包含路径。如果您有自制软件,请打开终端并输入

brew tap homebrew/versions
brew install gcc48

您可以使用这两行安装 gcc-4.8 和新的 libstdc++。现在,创建一些 c++ 文件并尝试使用带有 -v 选项的 g++-4.8。

g++-4.8 -v example.cpp

-v 选项告诉 gcc 显示详细的日志。在输出中,应该有一些这样的行。

#include <...> search starts here:
 /usr/local/Cellar/gcc48/4.8.1/gcc/lib/gcc/x86_64-apple-darwin12.4.1/4.8.1/../../../../include/c++/4.8.1
 /usr/local/Cellar/gcc48/4.8.1/gcc/lib/gcc/x86_64-apple-darwin12.4.1/4.8.1/../../../../include/c++/4.8.1/x86_64-apple-darwin12.4.1
 /usr/local/Cellar/gcc48/4.8.1/gcc/lib/gcc/x86_64-apple-darwin12.4.1/4.8.1/../../../../include/c++/4.8.1/backward
 /usr/local/Cellar/gcc48/4.8.1/gcc/lib/gcc/x86_64-apple-darwin12.4.1/4.8.1/include
 /usr/local/include
 /usr/local/Cellar/gcc48/4.8.1/gcc/include
 /usr/local/Cellar/gcc48/4.8.1/gcc/lib/gcc/x86_64-apple-darwin12.4.1/4.8.1/include-fixed
 /usr/include
 /System/Library/Frameworks
 /Library/Frameworks
End of search list.

这些路径是 gcc4.8 用来查找标头的。打开SublimeClang.sublime-settings--User,把这些路径和“-std=c++11”这样放。

{
    "options":[
    "-I/usr/local/Cellar/gcc48/4.8.1/gcc/lib/gcc/x86_64-apple-darwin12.4.1/4.8.1/../../../../include/c++/4.8.1",
    "-I/usr/local/Cellar/gcc48/4.8.1/gcc/lib/gcc/x86_64-apple-darwin12.4.1/4.8.1/../../../../include/c++/4.8.1/x86_64-apple-darwin12.4.1",
    "-I/usr/local/Cellar/gcc48/4.8.1/gcc/lib/gcc/x86_64-apple-darwin12.4.1/4.8.1/../../../../include/c++/4.8.1/backward",
    "-I/usr/local/Cellar/gcc48/4.8.1/gcc/lib/gcc/x86_64-apple-darwin12.4.1/4.8.1/include",
    "-I/usr/local/include",
    "-I/usr/local/Cellar/gcc48/4.8.1/gcc/include",
    "-I/usr/local/Cellar/gcc48/4.8.1/gcc/lib/gcc/x86_64-apple-darwin12.4.1/4.8.1/include-fixed",
    "-I/usr/include",
    "-I/System/Library/Frameworks",
    "-I/Library/Frameworks"
    ],

    "additional_language_options":
    {
        "c++" :[
        "-std=c++11"
        ],
        "c": [],
        "objc": [],
        "objc++": []
    }
}

我可以这样做。

如果您不使用自制软件,它不会有太大的不同。

于 2013-08-07T15:00:19.317 回答
2

在 OS X 10.9 Mavericks 上,以下配置对我有用:

  1. clang++使用命令行上提供的 OS X 进行工作编译。附加-v命令行选项以获取它使用的系统包含目录的列表。对我来说,这些是: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include

  2. SublimeClang 默认添加自己的包含文件,在我的系统上这些文件已经过时了。为 SublimeClang 设置此首选项:"dont_prepend_clang_includes": true

  3. 在 SublimeClang 语言选项中启用 C++11: "additional_language_options":{"c++": ["--std=c++11"]}
于 2013-12-09T09:52:53.113 回答