【问题标题】:How to use the available C++17 flags from Xcode in Terminal如何在终端中使用 Xcode 中可用的 C++17 标志
【发布时间】:2018-02-03 23:31:27
【问题描述】:

我的 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++17options 在 Xcode 中都不可用。现在我们有了这个选项,但我不知道如何在终端中使用它。

【问题讨论】:

    标签: c++ xcode c++17


    【解决方案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 标志。

    【讨论】:

    • 感谢您的回答。所以如果我去Building settings/Apple LLVM 9.0 - Language C++/C++ Language Dialect/ 并选择-std=c++17-std=gnu++17 选项,Xcode 是否仍在使用-std=c++1z 编译我的代码?如果是,如果最后两者都是相同的 c++1z,为什么他们会给我的 c++17 和 gnu++17 选项?这是我脑海中仍然不清楚的部分。
    • Xcode 实际使用的标志是-std=c++1z-std=gnu++1z,您可以看到Xcode 使用报告导航器的确切编译命令。如果您单击左侧的构建过程并启用“所有消息”,您将看到 Xcode 正在编译的每个文件都有一行。通过单击列表条目右侧的线条图标打开详细信息。它将打开所使用的确切构建命令,并且警告可能会出现在该文件中。铿锵苹果船比c++17 标志更早。在此期间,它被称为c++1z,因为不清楚最后是否会是 17 岁。
    • 目前(Xcode 版本 12.4)Clang 支持 C++17。转到 Apple Clang - Language - C++,选择 C++ Language Dialect。如果您没有看到 C++17 选项,请确保您的 Clang 编译器是最新的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多