这个项目试图为我做什么?
使跨平台使用std ::文件系统API,甚至否则(条件)不可用的std ::文件系统API。
[不是Bazel用户吗?只需直接使用Gulrak/文件系统即可。]
为什么我不能正常使用std ::文件系统?
在MacOS 10.15,iOS/TVOS 13.0和WatchOS 6.0之前,STD ::文件系统即使使用C ++ 17。如果您尝试使用std ::文件系统,则会遇到“错误:'path”不可用的错误:引入...
至少在撰写本文时,大多数Apple开发人员都会针对年龄较大的OSS,因此需要返回std ::文件系统。如果您想使用std ::文件系统并让您的代码在Apple Platforms上工作:)很有用::)
[这还可以让您在较旧的C ++版本中使用STD ::文件系统(C ++ 11 On),但这不是主要动机。只需更新到最新的C ++版本!]
这如何解决我的问题?
只需使用下面的设置摘要, #include "backport/filesystem.hpp" ,然后将FS ::用作可能针对Apple平台的代码中的STD :: Filesystem的插入式替换。
在引擎盖下,我们回到需要它的二进制文件中的Gulrak/Filesystem(仅)。 Gulrak/Filesystem与STD :: Filesystem与API兼容,因此您可以编写与其他相同的现代代码,并且一旦STD :: Filesystem Support无处不在,它将很容易过渡此垫片。 (从前,我们回到了BOOST ::文件系统上,但是API的差异足以让人非常烦人,尤其是在BOOST :: Filesystem启发性std :: Filesystem的情况下,尤其是在时间。
基本设置时间:2M
Howdy,Bazel用户?让您立即使用STD :: Filesystem API。
这里有很多文字,但这仅仅是因为我们试图阐明事情并使它们变得容易。如果您有问题,请告诉我们;我们希望您的帮助使事情变得更好,更完整 - 我们很乐意为您提供帮助!
将其复制到您的Bazel WORKSPACE文件中,以将其添加为外部依赖性,并确保根据以下说明更新为最新提交。
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 ::文件系统相同,仅在FS ::下
有关API文档,请参见https://en.cppreference.com/w/cpp/filesystem。
但是我们确实有建议...
包括安全补丁在内的基础库经常进行改进,因此我们建议保持最新。
我们强烈建议您在某个时候设置翻新(或类似)的装修(或类似),以默认情况下保持这种依赖性(和其他)。 [我们没有隶属于翻新或其他任何东西,但我们认为这很棒。它观看新版本,并向您发送PRS以进行审查或自动测试。它是免费的,易于设置。它在我们的代码库中非常有用,我们已经与出色的维护者合作,使其非常适合Bazel使用。它用于官方的Bazel存储库,这是一个!]
如果不是现在,也许稍后再回到此步骤,或者观看此存储库以获取更新。 [或者,当您在考虑观看时,也许给我们一个快速的明星。]像Abseil一样,我们住在头上;主要分支的最新提交是您想要的提交。因此,不要依靠发布通知;使用翻新或手动进行新的提交。
通过设置使其实现。为能够轻松地使用Portable代码中的STD :: Filesystem API而欢呼。
如果您将Bazel用于C ++,则可能还需要我们的其他一些工具,例如...