【问题标题】:How do I enable C++17 in Xcode for Mac OSX?如何在 Xcode for Mac OSX 中启用 C++17?
【发布时间】:2023-03-19 18:09:01
【问题描述】:

如何在 OSX High Sierra (10.13.5) 上的 Xcode (9.4.1) 中启用 C++17?

【问题讨论】:

  • 问题是什么?这看起来像一个答案
  • @claytonjwong 这是一个非常好的答案,但格式不正确。有关如何在 StackOverflow 上正确放置此类内容的更多信息,请参阅 this article :)
  • 嗨,我是新来的,我刚刚发布了这个信息,因为我认为它会有所帮助。感谢您以正确的格式分享文章!
  • 看来修改原始帖子可能为时已晚。下次我会做一个危险风格的问答。谢谢!
  • 我已经为您删除了答案,您应该可以将编辑历史记录中的原始帖子复制并粘贴到新答案中,单击“来源”按钮以获取原始标记

标签: c++ xcode c++17 macos-high-sierra xcode9.4


【解决方案1】:

在使用开发 CocoaPods(编写 C++ 库)时,我还必须更新包含 c++ 17 代码的库的 podspec,以编译包含此 pod 的主机应用程序。

所以我将这些标志添加到库的podspec

  spec.xcconfig = { 
    "CLANG_CXX_LANGUAGE_STANDARD" => "c++17",
    "CLANG_CXX_LIBRARY" => "libc++"
  }

【讨论】:

    【解决方案2】:

    在 OSX High Sierra (10.13.5) 上的 Xcode (9.4.1) 中使用 C++17 的步骤:

    1. 在 Xcode 中打开现有的或创建新的 C++ 项目
    2. 单击“显示项目导航器”按钮。它位于 Xcode 窗口的左上角,就在最小化/最大化/关闭窗口按钮的下方。它是最左边的图标,看起来像一个文件夹。
    3. 单击“构建设置”并向下滚动以找到并展开“Apple LLVM 9.0 - 语言 - C++”部分
    4. 将 C++ 语言方言组合框选择更改为“C++17 [-std=c++17]”

    验证步骤:

    现在当我输出 __cplusplus 时,我看到 201703,并且我能够编译 C++17 功能,例如 if constexpr。

    template<class T>
    int compute(T x) {
        if constexpr( supportsAPI(T{}) ) {
            // only gets compiled if the condition is true
            return x.Method();
        } else {
            return 0;
        }
    }
    
    int main(){
        cout << __cplusplus << endl;
        return 0;
    }
    

    输出:

    201703
    Program ended with exit code: 0
    

    【讨论】:

    • FWIW,对我来说,此设置位于 Apple Clang - Language - C++ 而不是 Apple LLVM 9.0 - Language - C++ - OSX 10.15.6,Xcode 版本 11.7。
    猜你喜欢
    • 2016-12-29
    • 1970-01-01
    • 2020-07-06
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多