¿Qué está tratando de hacer este proyecto por mí?
Haga que sea fácil usar la API STD :: Filesystem en todas las plataformas, incluso aquellas donde el sistema de archivos std :: no estaría disponible (condicionalmente).
[¿No es un usuario bazel? Simplemente use Gulrak/FileSystem directamente.]
¿Por qué no puedo usar STD :: FileSystem normalmente?
std :: filessystem no está disponible antes de los macOS 10.15, iOS/tvos 13.0, y WatchOS 6.0, incluso con C ++ 17. Si intenta usar STD :: FileSystem, obtendrá errores como "Error: 'ruta' no está disponible: introducido en ..."
Al menos al momento de escribir, la mayoría de los desarrolladores de Apple se dirigirán a OSS más antiguos que eso y, por lo tanto, necesitarán retroceso STD :: Files System. Esta biblioteca es útil si desea usar STD :: Files System y dejar que su código funcione en las plataformas Apple :)
[Esto también le permitirá usar STD :: Files System en versiones más antiguas de C ++ (C ++ 11 ON), pero esa no es la motivación principal. ¡Simplemente actualice la última versión de C ++!]
¿Cómo resuelve esto mi problema?
Simplemente use el fragmento de configuración a continuación, #include "backport/filesystem.hpp" y luego use FS :: como reemplazo de std :: filessystem en código que podría dirigirse a las plataformas Apple.
Bajo el capó, nos estamos volviendo a caer a Gulrak/Files System (solo) en binarios que lo necesitan. Gulrak/Files System es compatible con API con STD :: Files System, por lo que puede escribir el mismo código moderno que lo contrario, y, una vez que STD :: Files System Support es omnipresente, será fácil pasar la transición de esta cuña. (Érase una vez, volvimos a caer en Boost :: Files System, pero había suficientes diferencias en la API para ser muy molestas, especialmente alrededor del tiempo, a pesar de Boost :: Files System que ha inspirado el sistema de archivos std ::).
Tiempo de configuración básica: 2m
¿Hola, usuario de Bazel? Hagamos que use la API STD :: Filesystem en muy poco tiempo.
Hay un montón de texto aquí, pero solo porque estamos tratando de deletrear cosas y facilitarlas. Si tiene problemas, háganoslo saber; Nos encantaría su ayuda para hacer que las cosas sean aún mejor y más completas, ¡y nos encantaría ayudarlo!
Copie esto en su archivo Bazel WORKSPACE para agregar este repositorio como una dependencia externa, asegurándose de actualizar la última confirmación según las instrucciones a continuación.
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 () Agregue "@hedron_std_filesystem_backport" a sus deps y ...
# include " backport/filesystem.hpp "
fs::path p = ...La API es la misma que el sistema de archivos std ::, justo debajo de fs ::
Consulte https://en.cppreference.com/w/cpp/filesystem para los documentos API.
Pero tenemos una sugerencia ...
Las mejoras son frecuentemente a las bibliotecas subyacentes, incluidos los parches de seguridad, por lo que recomendamos mantenerse al día.
Recomendamos encarecidamente que configure renovado (o similar) en algún momento para mantener esta dependencia (y otras) actualizada por defecto. [No estamos afiliados a renovado ni nada, pero creemos que es increíble. Observa nuevas versiones y le envía PRS para su revisión o pruebas automatizadas. Es gratis y fácil de configurar. Ha sido asombrosamente útil en nuestra base de código, y hemos trabajado con el maravilloso mantenedor para hacer que las cosas sean excelentes para el uso de bazel. Y se usa en repositorios oficiales de bazel, ¡y este!]
Si no ahora, tal vez vuelva a este paso más tarde, o vea este repositorio para actualizaciones. [O oye, tal vez danos una estrella rápida, mientras estás pensando en mirar.] Como Abseil, vivimos en la cabeza; El último compromiso con la rama principal es el compromiso que desea. Así que no confíes en las notificaciones de liberación; Use renovado o encueste manualmente para nuevos compromisos.
Manera de pasar a través de la configuración. Saludos a poder usar fácilmente la API STD :: Filesystem en código portátil.
Si está usando Bazel para C ++, es probable que también quiera algunas de nuestras otras herramientas, como ...