2013-06-22 95 views
1

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

如果我使用非C++ 11 libs和代码它很高兴,但只要我尝试使用像std :: shared_ptr这样的东西它呻吟。

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

我已经为-std = C++ 11设置了额外的选项,所以我真的不知道我在想什么。

布莱尔

回答

2

在OS X 10.9小牛以下配置为我工作:在命令行上

  1. 获取与OS X中的工作编辑提供clang++。附加-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"]}
+0

我更新了XCode并将它更新为版本6.0(LLVM 3.5svn)。现在SublimeClang坏了。问题是/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault。xctoolchain/usr/lib/C++/v1不存在了!这意味着任何标准库都消失了。 – Xplane

2

它可能为时已晚,但我发现如何做到这一点。 这个问题是因为铿锵声使用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++": [] 
    } 
} 

我可以这样做。

如果你不使用自制软件,它将不会如此不同。

+0

作为替代我认为你可以使用的libC++附带OS X,而不是得到一个更新的libstdC++。 libC++是OS X的C++ 11标准库的新实现。 – bames53

+0

是的,我尝试过,但是当我使用libC++时,在完整的建议中有__1命名空间(我知道这个命名空间是用于声明使用libC++而不是libstdC++),我无法找到如何删除它。 @ bames53 – Sho