โครงการนี้พยายามทำอะไรให้ฉัน?
ทำให้ง่ายต่อการใช้งาน STD :: ระบบไฟล์ API ข้ามแพลตฟอร์มแม้กระทั่งที่ STD :: ระบบไฟล์จะไม่สามารถใช้งานได้ (เงื่อนไข)
[ไม่ใช่ผู้ใช้ Bazel? เพียงใช้ Gulrak/FileSystem โดยตรง]
เหตุใดฉันจึงใช้ระบบไฟล์ STD :: ตามปกติ?
STD :: ระบบไฟล์ไม่พร้อมใช้งานก่อน MacOS 10.15, iOS/TVOS 13.0 และ WatchOS 6.0 แม้จะมี C ++ 17 หากคุณพยายามใช้ระบบไฟล์ STD :: คุณจะได้รับข้อผิดพลาดเช่น "ข้อผิดพลาด: 'พา ธ ' ไม่พร้อมใช้งาน: แนะนำใน ... "
อย่างน้อยในช่วงเวลาของการเขียนนักพัฒนา Apple ส่วนใหญ่จะกำหนดเป้าหมาย OSS ที่เก่ากว่านั้นดังนั้นจึงจำเป็นต้องใช้ระบบไฟล์ STD :: ไลบรารีนี้มีประโยชน์หากคุณต้องการใช้ STD :: ระบบไฟล์และให้รหัสของคุณทำงานบนแพลตฟอร์ม Apple :)
[สิ่งนี้จะช่วยให้คุณใช้ระบบไฟล์ STD :: ในรุ่น C ++ รุ่นเก่า (C ++ 11 ON) แต่นั่นไม่ใช่แรงจูงใจหลัก เพียงอัปเดตเป็นเวอร์ชัน C ++ ล่าสุด!]
สิ่งนี้แก้ปัญหาของฉันได้อย่างไร?
เพียงใช้ตัวอย่างการตั้งค่าด้านล่าง #include "backport/filesystem.hpp" จากนั้นใช้ FS :: เป็นการแทนที่แบบดรอปอินสำหรับระบบไฟล์ STD :: ในรหัสที่อาจกำหนดเป้าหมายแพลตฟอร์ม Apple
ภายใต้ประทุนเรากำลังถอยกลับไปที่ Gulrak/ระบบไฟล์ (เท่านั้น) ในไบนารีที่ต้องการ Gulrak/Filesystem เข้ากันได้กับ API กับระบบไฟล์ STD :: ดังนั้นคุณสามารถเขียนรหัสสมัยใหม่ที่คุณจะทำอย่างอื่นและเมื่อ std :: การสนับสนุนระบบไฟล์เป็นที่แพร่หลายมันจะง่ายต่อการเปลี่ยน shim นี้ (กาลครั้งหนึ่งเรากลับมาที่ Boost :: ระบบไฟล์ แต่มีความแตกต่างมากพอใน API ที่จะน่ารำคาญมากโดยเฉพาะอย่างยิ่งในช่วงเวลาแม้จะเพิ่ม :: ระบบไฟล์ที่ได้รับแรงบันดาลใจจากระบบไฟล์ STD ::
เวลาการตั้งค่าพื้นฐาน: 2m
ผู้ใช้ Bazel Howdy?. ขอให้คุณใช้ STD :: FileSystem API ในเวลาไม่นาน
มีข้อความมากมายที่นี่ แต่เพียงเพราะเราพยายามสะกดสิ่งต่าง ๆ และทำให้พวกเขาง่าย หากคุณมีปัญหาแจ้งให้เราทราบ เราชอบความช่วยเหลือของคุณที่จะทำให้สิ่งต่าง ๆ ดีขึ้นและสมบูรณ์ยิ่งขึ้น - และเรายินดีที่จะช่วยเหลือคุณ!
คัดลอกสิ่งนี้ลงในไฟล์ Bazel WORKSPACE ของคุณเพื่อเพิ่ม repo นี้เป็นการพึ่งพาภายนอกตรวจสอบให้แน่ใจว่าได้อัปเดตการกระทำล่าสุดตามคำแนะนำด้านล่าง
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 ::
ดู https://en.cppreference.com/w/cpp/filesystem สำหรับเอกสาร API
แต่เรามีข้อเสนอแนะ ...
การปรับปรุงมาถึงไลบรารี่พื้นฐานรวมถึงแพตช์ความปลอดภัยดังนั้นเราขอแนะนำให้ติดตามทันสมัย
เราขอแนะนำอย่างยิ่งให้คุณตั้งค่าการปรับปรุง (หรือคล้ายกัน) ในบางจุดเพื่อให้การพึ่งพานี้ (และอื่น ๆ ) ทันสมัยโดยค่าเริ่มต้น [เราไม่ได้มีส่วนเกี่ยวข้องกับการปรับปรุงใหม่หรืออะไร แต่เราคิดว่ามันยอดเยี่ยม มันดูเวอร์ชันใหม่และส่ง PRS ให้คุณเพื่อตรวจสอบหรือทดสอบอัตโนมัติ ฟรีและง่ายต่อการติดตั้ง มันมีประโยชน์อย่างน่าประหลาดใจใน codebase ของเราและเราได้ทำงานร่วมกับผู้ดูแลที่ยอดเยี่ยมเพื่อทำให้สิ่งต่าง ๆ ดีสำหรับการใช้งาน Bazel และใช้ในที่เก็บ Bazel อย่างเป็นทางการ-และอันนี้!]
ถ้าไม่ใช่ตอนนี้อาจจะกลับมาที่ขั้นตอนนี้ในภายหลังหรือดู repo นี้สำหรับการอัปเดต [หรือเฮ้อาจจะให้ดาราอย่างรวดเร็วแก่เราในขณะที่คุณกำลังคิดจะดู] เหมือน Abseil เราอยู่ที่หัว ความมุ่งมั่นล่าสุดกับสาขาหลักคือการกระทำที่คุณต้องการ ดังนั้นอย่าพึ่งพาการแจ้งเตือน ใช้การปรับปรุงหรือโพลด้วยตนเองสำหรับคณะกรรมการใหม่
วิธีที่จะทำให้ผ่านการตั้งค่า ไชโยที่จะสามารถใช้ STD :: ระบบไฟล์ API ในรหัสพกพาได้อย่างง่ายดาย
หากคุณใช้ Bazel สำหรับ C ++ คุณอาจต้องการเครื่องมืออื่น ๆ ของเราเช่น ...