如何在Xcode for Mac OSX中启用C++ 17

cla*_*ong 11 c++ xcode c++17 macos-high-sierra xcode9.4

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

cla*_*ong 18

在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]"

Xcode构建设置

验证步骤:

现在当我输出__cplusplus时,我看到201703,我能够编译C++ 17的功能,例如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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

201703
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)

  • FWIW,此设置位于“Apple Clang - Language - C++”下,而不是“Apple LLVM 9.0 - Language - C++”下 - OSX 10.15.6,Xcode 版本 11.7。 (6认同)

sch*_*dt9 5

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

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

  spec.xcconfig = { 
    "CLANG_CXX_LANGUAGE_STANDARD" => "c++17",
    "CLANG_CXX_LIBRARY" => "libc++"
  }
Run Code Online (Sandbox Code Playgroud)