Qu'est-ce que ce projet essaie de faire pour moi?
Rendez-le facile à utiliser l'API STD :: Système de fichiers sur les plates-formes, même celles où STD :: Système de fichiers serait autrement indisponible (conditionnellement).
[Pas un utilisateur de bazel? Utilisez simplement Gulrak / Système de fichiers directement.]
Pourquoi ne puis-je pas utiliser Std :: Système de fichiers normalement?
STD :: Système de fichiers n'est pas disponible avant MacOS 10.15, iOS / TVOS 13.0 et WatchOS 6.0, même avec C ++ 17. Si vous essayez d'utiliser STD :: Système de fichiers, vous obtiendrez des erreurs comme "Erreur:" Path "n'est pas disponible: introduit dans ..."
Au moins au moment de la rédaction, la plupart des développeurs d'Apple cibleront OSS plus anciens que cela et doivent donc être en backport std :: Système de fichiers. Cette bibliothèque est utile si vous souhaitez utiliser STD :: Système de fichiers et laissez votre code fonctionner sur les plates-formes Apple :)
[Cela vous permettra également d'utiliser STD :: Système de fichiers dans les anciennes versions C ++ (C ++ 11 ON), mais ce n'est pas la principale motivation. Il suffit de mettre à jour la dernière version C ++!]
Comment cela résout-il mon problème?
Utilisez simplement l'extrait de configuration ci-dessous, #include "backport/filesystem.hpp" , puis utilisez FS :: comme remplacement de dépôt pour STD :: Système de fichiers dans le code qui pourrait cibler les plates-formes Apple.
Sous le capot, nous retombons à Gulrak / Système de fichiers (uniquement) dans des binaires qui en ont besoin. Gulrak / FileSystem est compatible avec l'API avec STD :: Système de fichiers, vous pouvez donc écrire le même code moderne que vous auriez autrement, et, une fois que la prise en charge du système de fichiers est omniprésente, il sera facile de passer à ce Shim. (Il était une fois, nous nous sommes effondrés sur boost :: Système de fichiers, mais il y avait suffisamment de différences dans l'API pour être très ennuyeux, en particulier autour du temps, malgré Boost :: Système de fichiers ayant inspiré STD :: Système de fichiers.)
Temps de configuration de base: 2m
Howdy, Bazel User ?. Voyons vous utiliser l'API STD :: Système de fichiers en un rien de temps.
Il y a un tas de texte ici, mais uniquement parce que nous essayons d'épeler les choses et de les rendre faciles. Si vous avez des problèmes, faites-le nous savoir; Nous aimerions votre aide à rendre les choses encore meilleures et plus complètes - et nous serions ravis de vous aider!
Copiez-le dans votre fichier WORKSPACE Bazel pour ajouter ce dépôt en tant que dépendance externe, en vous assurant de mettre à jour le dernier engagement selon les instructions ci-dessous.
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 () Ajoutez "@hedron_std_filesystem_backport" à vos deps , et ...
# include " backport/filesystem.hpp "
fs::path p = ...L'API est la même que STD :: Système de fichiers, juste sous FS ::
Voir https://en.cppreference.com/w/cpp/filesystem pour les documents API.
Mais nous avons une suggestion ...
Les améliorations viennent fréquemment des bibliothèques sous-jacentes, y compris les correctifs de sécurité, nous vous recommandons donc de rester à jour.
Nous vous recommandons fortement de configurer Renove (ou similaire) à un moment donné pour maintenir cette dépendance (et d'autres) à jour par défaut. [Nous ne sommes pas affiliés à Renovate ou quoi que ce soit, mais nous pensons que c'est génial. Il regarde pour de nouvelles versions et vous envoie des PR pour examen ou tests automatisés. C'est gratuit et facile à installer. Il a été incroyablement utile dans notre base de code, et nous avons travaillé avec le merveilleux mainteneur pour rendre les choses super pour une utilisation en bazel. Et il est utilisé dans les référentiels officiels de Bazel - et celui-ci!]
Sinon maintenant, revenez peut-être à cette étape plus tard, ou regardez ce dépôt pour les mises à jour. [Ou bon, peut-être nous donner une star rapide, pendant que vous pensez à regarder.] Comme Abseil, nous vivons à la tête; Le dernier engagement dans la branche principale est l'engagement que vous souhaitez. Alors ne comptez pas sur les notifications de libération; Utilisez rénover ou sonder manuellement pour les nouveaux engins.
Moyen de le faire grâce à la configuration. Bravo pour pouvoir utiliser facilement l'API STD :: Système de fichiers dans le code portable.
Si vous utilisez Bazel pour C ++, vous voudrez probablement également certains de nos autres outils, comme ...