如何使用终端中Xcode的可用C ++ 17标志

时间:2018-02-03 13:24:20

标签: c++ xcode c++17

我的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中都不可用。现在我们有了这个选项,但我无法弄清楚如何在终端中使用它。

1 个答案:

答案 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标志。