如何在Mac终端中使用C ++ 11支持编译C ++

时间:2013-01-09 05:34:50

标签: c++ macos c++11 terminal g++

我想在Mac终端中编译C ++ 11源代码但是失败了。我尝试了g++ -std=c++11g++ -std=c++0xg++ -std=gnu++11g++ -std=gnu++0x,但没有任何效果。终端始终阅读unrecognized command line option。但是,g++ -std=gnu和类似的东西工作正常(当然C ++ 11源代码无法通过)。

我应该使用哪个选项来启用C ++ 11支持?

顺便说一句,我正在使用的命令行工具安装在Xcode中,我很确定它们是最新的。

2 个答案:

答案 0 :(得分:94)

正如其他人指出的那样,你应该使用clang++而不是g++。此外,您应该使用libc ++库而不是默认的libstdc ++;包含的libstdc ++版本已经很老了,因此不包含C ++ 11库的功能。

clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

如果您尚未安装Xcode的命令行工具,则无需使用xcrun工具即可运行编译器和其他工具。

xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

此外,如果您要禁用某个特定警告,则可以将其他标志传递给编译器以执行此操作。在警告消息的末尾,它会显示启用警告的最具体标志。要禁用该警告,请将no-添加到警告名称。

例如,您可能不希望c ++ 98兼容性警告。在这些警告结束时,它会显示标记-Wc++98-compat并禁用它们,您将通过-Wno-c++98-compat

答案 1 :(得分:24)

XCode在编译时使用clangclang++,而不是g++(假设您没有自定义内容)。相反,尝试:

$ cat t.cpp
#include <iostream>

int main()
{
    int* p = nullptr;
    std::cout << p << std::endl;
}
$ clang++ -std=c++11 -stdlib=libc++ t.cpp
$ ./a.out 
0x0

感谢bames53的回答,指出我遗漏了-stdlib=libc++

如果你想使用一些GNU扩展(也使用C ++ 11),你可以使用-std=gnu++11代替-std=c++11,这将打开C ++ 11模式并保持GNU已启用扩展程序。