このプロジェクトは私のために何をしようとしていますか?
STD ::ファイルシステムAPIを簡単に使用できるようにします。これは、STD :: Filesシステムが(条件付きで)利用できない場合でもあります。
[Bazelユーザーではありませんか? Gulrak/Filesystemを直接使用するだけです。]
なぜstd :: filesystemを通常使用できないのですか?
STD :: Filesシステムは、C ++ 17であっても、MacOS 10.15、iOS/TVOS 13.0、およびWatchos 6.0の前に利用できません。 STD :: Files -Systemを使用しようとすると、「エラー:「パス」が利用できない」などのエラーが表示されます。
少なくとも執筆時点では、ほとんどのApple開発者はそれよりも古いOSSをターゲットにするため、STD :: Filesシステムをバックポートする必要があります。このライブラリは、STD :: Files -Systemを使用し、Appleプラットフォームでコードを動作させる場合に役立ちます:)
[これにより、古いC ++バージョン(C ++ 11 on)でstd :: filesystemを使用することもできますが、それは主な動機ではありません。最新のC ++バージョンに更新するだけです!]
これは私の問題をどのように解決しますか?
以下のセットアップスニペットを使用して、 #include "backport/filesystem.hpp"してから、FS ::を使用して、Appleプラットフォームをターゲットにする可能性のあるコードのSTD :: Files-Systemのドロップイン交換として使用します。
ボンネットの下で、私たちはそれを必要とするバイナリのGulrak/Filesystem(のみ)に頼ります。 gulrak/filesystemはstd :: filesystemを使用してAPI互換であるため、そうでなければ同じ最新のコードを記述できます。STD:: Files-Systemサポートがユビキタスになると、このシムから簡単に移行できます。 (昔々、Boost :: Filesystemに戻りましたが、APIには非常に迷惑なのに十分な違いがありました。
基本セットアップ時間:2m
Howdy、Bazelユーザー?。 STD :: Filesystem APIをすぐに使用してみましょう。
ここにはたくさんのテキストがありますが、それは物事を綴り、簡単にしようとしているからです。問題がある場合は、お知らせください。私たちはあなたの助けをもっと良くし、より完全にすることを望んでいます - そして私たちはあなたを助けたいです!
これをBazel WORKSPACEファイルにコピーして、外部依存関係としてこのリポジトリを追加し、以下の指示に従って最新のコミットに更新します。
load ( "@bazel_tools//tools/build_defs/repo:http.bzl" , "http_archive" )
# Hedron's std::filesystem Backport
# Lets you use the std::filesystem API on Apple platforms, where it wouldn't otherwise be available.
# (Deployment targets before macOS 10.15, iOS/tvOS 13.0, and watchOS 6.0)
# Just use fs:: as a drop-in replacement for std::filesystem.
# https://github.com/hedronvision/bazel-cc-filesystem-backport
http_archive (
name = "hedron_std_filesystem_backport" ,
# Replace the commit hash in both places (below) with the latest, rather than using the stale one here.
# Even better, set up Renovate and let it do the work for you (see "Suggestion: Updates" in the README).
url = "https://github.com/hedronvision/bazel-cc-filesystem-backport/archive/315416306204ce6bb2983b4a923815a7e89eb727.tar.gz" ,
strip_prefix = "bazel-cc-filesystem-backport-315416306204ce6bb2983b4a923815a7e89eb727" ,
# When you first run this tool, it'll recommend a sha256 hash to put here with a message like: "DEBUG: Rule 'hedron_std_filesystem_backport' indicated that a canonical reproducible form can be obtained by modifying arguments sha256 = ..."
)
load ( "@hedron_std_filesystem_backport//:workspace_setup.bzl" , "hedron_backport_std_filesystem" )
hedron_backport_std_filesystem ()"@hedron_std_filesystem_backport"をあなたのdepsに追加し、...
# include " backport/filesystem.hpp "
fs::path p = ...APIはstd :: filesystemと同じです。
https://en.cppreference.com/w/cpp/filesystem for api docsを参照してください。
しかし、私たちには提案があります...
セキュリティパッチを含む基礎となるライブラリに頻繁に改善が行われるため、最新の状態を保つことをお勧めします。
デフォルトでこの依存関係(およびその他)を最新の状態に保つために、ある時点で改修(または類似)をセットアップすることを強くお勧めします。 [私たちは改修などに所属していませんが、それは素晴らしいと思います。新しいバージョンを監視し、レビューまたは自動テストのためにPRを送信します。無料でセットアップが簡単です。コードベースで驚くほど便利であり、私たちは素晴らしいメンテナーと協力して、バゼルの使用に最適なものにしました。そして、それは公式のBazelリポジトリで使用されています - そしてこれ!]
今ではない場合は、後でこのステップに戻ってくるか、更新のためにこのリポジトリをご覧ください。 [または、ちょっと、たぶん私たちに見ている間、私たちに簡単な星を与えてください。] Abseilのように、私たちは頭に住んでいます。メインブランチへの最新のコミットは、あなたが望むコミットです。したがって、リリース通知に依存しないでください。新規コミットには改修または投票を手動で使用します。
セットアップでそれを作成する方法。 PortableコードでSTD :: Filesystem APIを簡単に使用できるようになります。
C ++のためにBazelを使用している場合、おそらく他のツールのいくつかが必要です...