Что этот проект пытается сделать для меня?
Сделайте легко использовать API файловой системы STD :: FileStem, даже те, где std :: filesystem в противном случае (условно) недоступна.
[Не пользователь Bazel? Просто используйте Gulrak/FileSystem напрямую.]
Почему я не могу использовать STD :: FileSystem обычно?
STD :: FileSystem недоступна перед MacOS 10.15, iOS/TVOS 13.0 и WatchOS 6.0, даже с C ++ 17. Если вы попытаетесь использовать STD :: FileSystem, вы получите ошибки, такие как «Ошибка:« Путь »недоступен: представлено в ...»
По крайней мере, во время написания, большинство разработчиков Apple будут нацелены на OSS старше, чем это, и поэтому необходимо вернуть STD :: FileSystem. Эта библиотека полезна, если вы хотите использовать файловую систему std :: filesystem и позволить вашему коду работать на платформах Apple :)
[Это также позволит вам использовать файловую систему std :: в старых версиях C ++ (C ++ 11 On), но это не основная мотивация. Просто обновите последнюю версию C ++!]
Как это решает мою проблему?
Просто используйте фрагмент настройки ниже, #include "backport/filesystem.hpp" , а затем используйте FS :: в качестве замены выпуска для STD :: FileSystem в коде, которая может нацелиться на платформы Apple.
Под капотом мы возвращаемся к Гулрак/файловой системе (только) в двоичных файлах, которые нуждаются в этом. Gulrak/FileSystem совместим с API с файловой системой std ::, так что вы можете написать тот же современный код, который вы бы в противном случае были бы, и, как только поддержка STD :: FileSystem будет вездесущему, будет легко перенести этот Shim. (Однажды мы отказались от Boost :: FileSystem, но в API было достаточно различий, чтобы быть очень раздражающими, особенно в течение времени, несмотря на Boost :: FileSystem, вдохновляя STD :: FileSystem.)
Основное время настройки: 2M
Привет, пользователь Bazel? Давайте в кратчайшие сроки давайте используем API STD :: FileSystem.
Здесь есть куча текста, но только потому, что мы пытаемся что -то изложить и облегчить их. Если у вас есть проблемы, дайте нам знать; Мы хотели бы, чтобы ваша помощь сделала вещи еще лучше и более полной - и мы хотели бы помочь вам!
Скопируйте это в свой файл WORKSPACE Bazel, чтобы добавить это репо в качестве внешней зависимости, убедившись, что они обновились до последнего коммита в соответствии с инструкциями ниже.
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 ::,
См.
Но у нас есть предложение ...
Улучшения часто приходят в базовые библиотеки, включая исправления безопасности, поэтому мы рекомендуем поддерживать актуальность.
Мы настоятельно рекомендуем вам настроить Renovate (или аналогичный) в какой-то момент, чтобы по умолчанию поддерживать эту зависимость (и другие). [Мы не связаны с ремонтом или чем -то еще, но мы думаем, что это круто. Он наблюдает за новыми версиями и отправляет вам PRS для просмотра или автоматического тестирования. Это бесплатно и легко настроить. Это было поразительно полезно в нашей кодовой базе, и мы работали с замечательным сопровождающим, чтобы сделать все отлично для использования Bazel. И он используется в официальных репозиториях Bazel-и в этом!]
Если нет сейчас, возможно, вернитесь к этому шагу позже или посмотрите эту репо для обновлений. [Или эй, может быть, дайте нам быструю звезду, пока вы думаете о просмотре.] Как и Абсейл, мы живем в голове; Последний коммит в основной филиале - это коммит, который вы хотите. Так что не полагайтесь на уведомления о выпуске; Используйте ремонт или опрос вручную для новых коммитов.
Способ сделать это через настройку. Приветствую возможность легко использовать API STD :: FileSystem в портативном коде.
Если вы используете Bazel для C ++, вы, вероятно, также захотите некоторые другие наши инструменты, например ...