我的Xcode 9.2可以选择使用:-std=c++17
或-std=gnu++17
来编译C ++。
具有一些C ++ 17功能的我的C ++代码成功编译。
但是,如果我尝试使用相同的标志在终端中编译相同的代码,我会收到以下错误:
clang++ -std=c++17 test.cpp -o test
error: invalid value 'c++17' in '-std=c++17'
和
clang++ -std=gnu++17 test.cpp -o test
error: invalid value 'gnu++17' in '-std=gnu++17'
我的OSX版本是10.13.3,而我的Clang ++版本是:
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin17.4.0
我以为终端会使用Xcode中的相同编译器。可能是这种情况,但我不能使用相同的选项。至少我不能。
我尝试使用-std=C++1z
,但它没有编译我的代码,因为它不了解C ++ 17中的一些新功能。
所以我的问题是:有没有办法在我的终端应用中使用我的Xcode 9.2中当前可用的-std=c++17
或-std=gnu++17
?
此问题与stackoverflow上的其他问题不同,因为我发现-std=c++17
选项的所有答案在Xcode中都不可用。现在我们有了这个选项,但我无法弄清楚如何在终端中使用它。
答案 0 :(得分:1)
Apple目前附带Xcode 9.2(clang-900.0.39.2
)的编译器不支持-std=c++17
标志。
当您启用c ++ 17支持时,Xcode使用-std=c++1z
标志。如果要使用-std=c++17
,则需要手动安装clang。您可以使用brew install llvm
执行此操作(假设您已安装自制程序)。
您可以使用
编译您的程序 /usr/local/Cellar/llvm/5.0.0/bin/clang++ -std=c++17 test.cpp -o test
如果您不想使用编译器的完整路径,可以将usr/bin/clang++
中的符号链接更改为指向新目标。
Xcode 9.3附带的编译器将是
Apple LLVM version 9.1.0 (clang-902.0.30)
这可以处理-std=c++17
标志。