O que esse projeto está tentando fazer por mim?
Facilite o uso da API STD :: FileSystem entre as plataformas, mesmo aquelas em que o sistema de arquivos STD :: de outra forma estaria (condicionalmente) indisponível.
[Não é um usuário do Bazel? Basta usar o Gulrak/FileSystem diretamente.]
Por que não posso usar o STD :: FileSystem normalmente?
STD :: FileSystem não está disponível antes do MacOS 10.15, iOS/TVOS 13.0 e WatchOS 6.0, mesmo com C ++ 17. Se você tentar usar o STD :: FileSystem, receberá erros como "Erro: 'Path' não está disponível: introduzido em ..."
Pelo menos no momento da redação deste artigo, a maioria dos desenvolvedores da Apple tem como alvo o OSS mais antigo do que isso e, portanto, precisa fazer o backup do STD :: FileSystem. Esta biblioteca é útil se você quiser usar o STD :: FileSystem e deixe seu código funcionar nas plataformas da Apple :)
[Isso também permitirá que você use o STD :: FileSystem nas versões C ++ mais antigas (C ++ 11), mas essa não é a principal motivação. Basta atualizar para a mais recente versão C ++!]
Como isso resolve meu problema?
Basta usar o snippet de configuração abaixo, #include "backport/filesystem.hpp" e depois usar o FS :: como uma substituição para o STD :: FileSystem no código que pode segmentar plataformas da Apple.
Sob o capô, estamos voltando ao Gulrak/FileSystem (somente) em binários que precisam dele. GulRak/FileSystem é compatível com a API com o STD :: FileSystem, para que você possa escrever o mesmo código moderno que seria de outra forma e, uma vez que o suporte a Std :: FileSystem for onipresente, será fácil fazer a transição desse calço. (Era uma vez, caímos no Boost :: FileSystem, mas houve diferenças suficientes na API para ser muito irritante, especialmente no tempo, apesar do Boost :: FileSystem ter inspirado o STD :: FileSystem.)
Tempo básico de configuração: 2M
Olá, usuário do Bazel?. Vamos fazer com que você use a API STD :: FileSystem em pouco tempo.
Há um monte de texto aqui, mas apenas porque estamos tentando soletrar as coisas e facilitar as coisas. Se você tiver problemas, informe -nos; Adoraríamos sua ajuda para tornar as coisas ainda mais completas e mais completas - e adoraríamos ajudá -lo!
Copie isso no seu arquivo de WORKSPACE Bazel para adicionar este repositório como uma dependência externa, certificando -se de atualizar para a última confirmação de acordo com as instruções abaixo.
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 () Adicione "@hedron_std_filesystem_backport" aos seus deps e ...
# include " backport/filesystem.hpp "
fs::path p = ...A API é a mesma que Std :: FileSystem, logo abaixo do FS ::
Consulte https://en.cppreference.com/w/cpp/filesystem para documentos da API.
Mas temos uma sugestão ...
As melhorias vêm frequentemente para as bibliotecas subjacentes, incluindo patches de segurança, por isso recomendamos manter-se atualizado.
Recomendamos fortemente que você configure renovados (ou similares) em algum momento para manter essa dependência (e outros) atualizados por padrão. [Não somos afiliados à reforma ou algo assim, mas achamos incrível. Ele observa novas versões e envia o PRS para revisão ou testes automatizados. É gratuito e fácil de configurar. Tem sido surpreendentemente útil em nossa base de código e trabalhamos com o maravilhoso mantenedor para tornar as coisas ótimas para uso da Bazel. E é usado em repositórios oficiais de Bazel-e este!]
Caso contrário, talvez volte a esta etapa mais tarde ou assista a este repositório para atualizações. [Ou ei, talvez nos dê uma estrela rápida, enquanto você está pensando em assistir.] Como Abseil, vivemos na cabeça; O mais recente comprometimento com o ramo principal é o compromisso que você deseja. Portanto, não confie nas notificações de liberação; Use renovar ou pesquisar manualmente para novos começos.
Maneira de fazer isso através da configuração. Saúde, para poder usar facilmente a API STD :: FileSystem no código portátil.
Se você está usando o Bazel para C ++, provavelmente também deseja algumas de nossas outras ferramentas, como ...