我的 Xcode 9.2 可以使用以下选项编译 C++:-std=c++17
或 -std=gnu++17
。
我的具有某些 C++17 功能的 C++ 代码编译成功。
但是,如果我尝试使用相同的标志在终端中编译相同的代码,则会出现以下错误:
clang++ -std=c++17 test.cpp -o 测试
错误:“-std=c++17”中的无效值“c++17”
和
clang++ -std=gnu++17 test.cpp -o 测试
错误:“-std=gnu++17”中的无效值“gnu++17”
我的 OSX 版本是 10.13.3,我的 Clang++ 版本是:
Apple LLVM 版本 9.0.0 (clang-900.0.39.2)
目标:x86_64-apple-darwin17.4.0
我认为终端会使用与 Xcode 相同的编译器。可能是这样,但我不能使用相同的选项。至少我做不到。
我尝试使用 -std=C++1z
,但它没有编译我的代码,因为它不理解 C++17 的一些新特性。
所以我的问题是:有没有办法使用目前在我的 Xcode 中可用的 -std=c++17
或 -std=gnu++17
9.2,在我的终端应用程序中?
这个问题与 stackoverflow 上提供的其他问题不同,因为我在 -std=c++17
选项中找到的所有答案在 Xcode 中都不可用。现在我们有了这个选项,但我不知道如何在终端中使用它。
最佳答案
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++
中的符号链接(symbolic link)以指向新目标。
Xcode 9.3 附带的编译器将是
Apple LLVM 版本 9.1.0 (clang-902.0.30)
这可以处理 -std=c++17
标志。
关于c++ - 如何在终端中使用来自 Xcode 的可用 C++17 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48597840/