`filesystem` with c++17 doesn't work on my mac os x high sierra

前端 未结 3 2095
无人共我
无人共我 2020-12-05 13:57

I\'m following this tutorial:

http://www.bfilipek.com/2017/08/cpp17-details-filesystem.html

to checkout new c++ filesystem feature. However I\'m

3条回答
  •  星月不相逢
    2020-12-05 14:55

    The compiler shipped with Xcode supports C++17 language features but not C++17 standard library features. Looking at your screenshot you will see the standard library support goes up to C++11, and Apple has not yet shipped a version of clang that has stdlib support for either C++14 or C++17.

    However hope is not lost! You can download the newest version of clang from the brew package manager.

    brew install clang
    

    Then you can compile by setting your cmake compiler flags to be your custom brew version and then running that.

    Here is a link how to do that: http://antonmenshov.com/2017/09/09/clang-openmp-setup-in-xcode/

    Edit:

    After installing llvm you will need to link your llvm path into your current shell. I have a shell script that I use at work to get this set up properly. Hope this helps.

    #!/bin/bash
    brew update
    brew install --with-toolchain llvm # llvm but with all the headers
    xcode-select --install # installs additional headers that you might be mimssing.
    echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.bash_profile # exports the custom llvm path into the shell 
    sudo ln -s /usr/local/opt/llvm/bin/clang++ /usr/local/bin/clang++-brew # optional but I like to have a symlink set.
    

    Edit 2:

    Clang 6.0 doesn't have included on macOS yet, however you can get , and link against -lc++experimental, and use std::experimental::filesystem instead of std::filesystem.

    Final command line invocation:

    Owen$ /usr/local/Cellar/llvm/6.0.0/bin/clang++ fs.cpp -std=c++1z -L /usr/local/Cellar/llvm/6.0.0/lib/ -lc++experimental

    Edit 3:

    Current clang version 7.0.1 supports either or . In any case, the compiler command line must be slightly different:

    Owen$ /usr/local/Cellar/llvm/7.0.1/bin/clang++ main.cpp -std=c++1z -L /usr/local/Cellar/llvm/7.0.1/lib/ -lc++fs
    

    with -lc++fs instead of -lc++experimental. Optionally, you can replace-std=c++1z with -std=c++17 as well.

提交回复
热议问题