c++ - 如何在终端中使用来自 Xcode 的可用 C++17 标志

标签 c++ xcode c++17

我的 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/

相关文章:

c++ - 迭代 std::string 元素

ios - 检查是否在特定日期添加了 Realm 数据

c++ - 如何正确安全地为 std::array 实现 C++ 算术运算符?

objective-c - objective-c 中使用 CBC 模式的 3DES 加密

c++ - std::string_view 在传递给另一个采用 std::string 的函数时的优点

c++ - 如何更新 std::vector<pair<int, int>> 中最近输入的元素?

c++ - Windows 7 下使用 C++ 和 OpenGL/Freeglut 的 NetBeans

c++ - 无法调用基类函数

c++ - 中小型项目的 Maven 学习曲线和开销?

ios - 失去与 "iPhone"的连接