プロジェクトにC++ 17のファイルシステムヘッダーを使用する必要があります。私の知る限り、AppleはついにXcode 11とmacOS Catalinaで利用できるようになりました。私は最新の(ベータ3)Xcode 11を使用しており、macOS Catalina public beta 2を使用しています。理論的には動作するはずですが、何らかの理由で動作せず、Xcodeは次のようなエラーを出します。
'~path' is unavailable: introduced in macOS 10.15
ビルド設定でC++標準ライブラリをlibc ++からlibstdc ++に設定すると、これらのエラーメッセージが表示されなくなり、警告が表示されます。
include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead
さまざまなファイルでiostreamとcstddefが欠落しているエラーのトン。ファイルシステムを機能させるにはどうすればよいですか?
編集:最小限のコード例
#include <filesystem>
#include <iostream>
#include <string>
bool isPathDir(std::string pathString);
int main(int argc, char *argv[])
{
std::string pathString = "../test.jpg";
if (isPathDir(pathString)) {
std::cout << "This is a directory!" << std::endl;
} else {
std::cout << "This is not a directory" << std::endl;
}
}
bool isPathDir(std::string pathString)
{
std::filesystem::path path(pathString);
return std::filesystem::is_directory(path);
}
私のコメントを回答に昇格する:
MacOS 10.15より古いバックデプロイメントターゲットが指定されていますか?これは、コマンドラインでは
-mmacosx-version-min=<value>
のように表示されます。@LouisDionneああそう、それが問題でした!デプロイメントターゲットを10.15に設定するとすぐに、コードは完全にビルドされます。これまで配備目標について聞いたことがありません、ありがとうございました!
ここで何が起こっているのかを説明するために、問題は<filesystem>
のサポートがMac OS 10.15でのみ導入されたことです。 -mmacosx-version-min=XYZ
を使用する場合は、プログラムがバージョンXYZ
までのバージョンのMac OSで実行できるようにコンパイラーに指示します。 10.15より古いバージョンを使用している場合は、コンパイル時に<filesystem>
を使用できないことを通知します。これは、Macのバージョンでプログラムを実行しようとすると、ランタイムエラー(libc++.dylib
に記号がない可能性があります)になるためです。 10.15より古いOS。