Proyek apa yang coba dilakukan untuk saya?
Buatlah mudah untuk menggunakan API sistem std :: Filesystem di seluruh platform, bahkan di mana STD :: Filesystem akan (secara kondisional) tidak tersedia.
[Bukan pengguna Bazel? Cukup gunakan Gulrak/Filesystem secara langsung.]
Mengapa saya tidak dapat menggunakan std :: fileSystem secara normal?
STD :: Filesystem tidak tersedia sebelum MacOS 10.15, iOS/TVOS 13.0, dan WatchOS 6.0, bahkan dengan C ++ 17. Jika Anda mencoba menggunakan STD :: Filesystem, Anda akan mendapatkan kesalahan seperti "Kesalahan: 'Path' tidak tersedia: diperkenalkan di ..."
Setidaknya pada saat penulisan, sebagian besar pengembang Apple akan menargetkan OSS lebih tua dari itu dan karenanya perlu mendukung STD :: Filesystem. Perpustakaan ini berguna jika Anda ingin menggunakan STD :: Filesystem dan biarkan kode Anda berfungsi di platform Apple :)
[Ini juga akan memungkinkan Anda menggunakan STD :: Filesystem dalam versi C ++ yang lebih lama (C ++ 11 ON), tetapi itu bukan motivasi utama. Cukup perbarui untuk versi C ++ terbaru!]
Bagaimana ini menyelesaikan masalah saya?
Cukup gunakan cuplikan setup di bawah ini, #include "backport/filesystem.hpp" dan kemudian gunakan fs :: sebagai pengganti drop-in untuk std :: filesystem dalam kode yang mungkin menargetkan platform Apple.
Di bawah kap, kita kembali ke Gulrak/sistem file (hanya) di binari yang membutuhkannya. Gulrak/Filesystem kompatibel dengan STD :: Filesystem, sehingga Anda dapat menulis kode modern yang sama dengan yang Anda lakukan, dan, setelah std :: Filesystem Dukungan ada di mana-mana, akan mudah untuk ditransisikan dari shim ini. ;
Waktu Pengaturan Dasar: 2m
Howdy, pengguna Bazel ?. Mari kita dapatkan Anda menggunakan API STD :: Filesystem dalam waktu singkat.
Ada banyak teks di sini tetapi hanya karena kami mencoba untuk menjelaskan dan membuatnya mudah. Jika Anda memiliki masalah, beri tahu kami; Kami akan menyukai bantuan Anda membuat segalanya menjadi lebih baik dan lebih lengkap - dan kami ingin membantu Anda!
Salin ini ke file Bazel WORKSPACE Anda untuk menambahkan repo ini sebagai ketergantungan eksternal, pastikan untuk memperbarui ke komit terbaru sesuai instruksi di bawah ini.
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 () Tambahkan "@hedron_std_filesystem_backport" ke deps Anda, dan ...
# include " backport/filesystem.hpp "
fs::path p = ...API sama dengan STD :: Filesystem, tepat di bawah FS ::
Lihat https://en.cppreference.com/w/cpp/filesystem untuk API Docs.
Tapi kami punya saran ...
Perbaikan sering datang ke perpustakaan yang mendasarinya, termasuk patch keamanan, jadi kami akan merekomendasikan untuk tetap terbaru.
Kami sangat menyarankan Anda mengatur renovasi (atau serupa) di beberapa titik untuk menjaga ketergantungan ini (dan lainnya) tetap mutakhir secara default. [Kami tidak berafiliasi dengan renovasi atau apa pun, tapi kami pikir itu luar biasa. Ini mengawasi versi baru dan mengirimi Anda PR untuk ditinjau atau pengujian otomatis. Gratis dan mudah diatur. Sangat berguna dalam basis kode kami, dan kami telah bekerja dengan pengelola yang luar biasa untuk membuat segalanya bagus untuk penggunaan bazel. Dan itu digunakan dalam repositori Bazel resmi-dan yang ini!]
Jika tidak sekarang, mungkin kembali ke langkah ini nanti, atau tonton repo ini untuk pembaruan. [Atau hei, mungkin beri kami bintang cepat, saat Anda berpikir untuk menonton.] Seperti Abseil, kami hidup di kepala; Komitmen terbaru ke cabang utama adalah komitmen yang Anda inginkan. Jadi jangan mengandalkan pemberitahuan rilis; Gunakan renovasi atau jajak pendapat secara manual untuk komit baru.
Cara untuk membuatnya melalui pengaturan. Cheers untuk dapat dengan mudah menggunakan API STD :: Filesystem dalam kode portabel.
Jika Anda menggunakan bazel untuk C ++, Anda mungkin juga ingin beberapa alat kami yang lain, seperti ...