這個項目試圖為我做什麼?
使跨平台使用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 ++,則可能還需要我們的其他一些工具,例如...