โครงการนี้พยายามทำอะไรให้ฉัน?
ทำให้ตายง่ายในการทำคำขอ HTTPS จาก C ++ (หรือ C)
ทำไมต้องใช้โครงการนี้เพื่อรับไลบรารีไคลเอนต์ C ++ HTTPS
C ++ กำลังขาดการสนับสนุนเครือข่ายที่มีชื่อเสียงนอกกรอบ หากคุณกำลังอ่านสิ่งนี้เราสงสัยว่าคุณอยู่ในตำแหน่งเดียวกับที่เราเคยเป็น: เราจำเป็นต้องเติมหลุมนั้นด้วยตัวเราเองและไม่พอใจกับตัวเลือกอื่น ๆ ที่เราเห็น เราเขียนรหัสนี้เพราะกฎของ Bazel อื่น ๆ ที่เราเคยเห็นมีปัญหาร้ายแรงที่ห่อม้วนไม่ว่าจะเป็นการกำหนดค่าผิดพลาดในไฟล์ของ Tensorflow ทำให้เกิดข้อผิดพลาดของหน่วยความจำหรือการห่อหุ้ม CMake ที่ไม่จัดการกับการตั้งค่า Bazel หรือการรวบรวมข้าม เป้าหมายที่นี่คือการสร้างองค์ประกอบที่นำกลับมาใช้ใหม่ได้อย่างง่ายดายซึ่งทำให้ทุกคนได้รับ
เวลาการตั้งค่าพื้นฐาน: 2m
ผู้ใช้ Bazel Howdy?. มาขอให้คุณทำคำขอ HTTPS ในเวลาไม่นาน
มีข้อความมากมายที่นี่ แต่เพียงเพราะเราพยายามสะกดสิ่งต่าง ๆ และทำให้พวกเขาง่าย หากคุณมีปัญหาแจ้งให้เราทราบ เราชอบความช่วยเหลือของคุณที่จะทำให้สิ่งต่าง ๆ ดีขึ้นและสมบูรณ์ยิ่งขึ้น - และเรายินดีที่จะช่วยเหลือคุณ!
คัดลอกสิ่งนี้ลงในไฟล์ Bazel WORKSPACE ของคุณเพื่อเพิ่ม repo นี้เป็นการพึ่งพาภายนอกตรวจสอบให้แน่ใจว่าได้อัปเดตการกระทำล่าสุดตามคำแนะนำด้านล่าง
load ( "@bazel_tools//tools/build_defs/repo:http.bzl" , "http_archive" )
# Hedron's Bazel Rules for C++ HTTPS Requests
# Makes @cpr, @curl, and @boringssl available for use
# https://github.com/hedronvision/bazel-make-cc-https-easy
# This also brings in @hedron_std_filesystem_backport to enable CPR across-platforms.
# 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.
# For more, see: https://github.com/hedronvision/bazel-cc-filesystem-backport
http_archive (
name = "hedron_make_cc_https_easy" ,
# 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-make-cc-https-easy/archive/315416306204ce6bb2983b4a923815a7e89eb727.tar.gz" ,
strip_prefix = "bazel-make-cc-https-easy-315416306204ce6bb2983b4a923815a7e89eb727" ,
# When you first run this tool, it'll recommend a sha256 hash to put here with a message like: "DEBUG: Rule 'hedron_make_cc_https_easy' indicated that a canonical reproducible form can be obtained by modifying arguments sha256 = ..."
)
load ( "@hedron_make_cc_https_easy//:workspace_setup.bzl" , "hedron_make_cc_https_easy" )
hedron_make_cc_https_easy ()
load ( "@hedron_make_cc_https_easy//:transitive_workspace_setup.bzl" , "hedron_keep_cc_https_easy" )
hedron_keep_cc_https_easy ()เช่นเดียวกับ C/C ++ ที่ขึ้นกับแพลตฟอร์มทั้งหมดใน Bazel คุณจะต้องใช้ Bazel 7+ (และกฎล่าสุดของกฎ _apple) สำหรับการกำหนดค่าต่อแพลตฟอร์มเพื่อทำงานโดยอัตโนมัตินอกกรอบ (โปรดยื่น PR เพื่อลบส่วนนี้หาก Bazel 7 ตอนนี้เก่ามากเท่าที่เป็นมาตรฐาน)
คุณจะต้องตรวจสอบให้แน่ใจว่าคุณติดตั้งส่วนหัวการพัฒนา Libcurl เพื่อให้คุณสามารถใช้งานได้จากรหัสของคุณ
เรียกใช้ sudo apt-get install libcurl4-openssl-dev (debian/ubuntu) หรือเทียบเท่ากับการกระจายของคุณ สำหรับคำแนะนำในการติดตั้งสำหรับการแจกแจงอื่น ๆ ดูรายการ libcurl ที่นี่: https://everything.curl.dev/get/linux หากคุณแจกจ่ายแพ็คเกจไบนารีตามรหัสของคุณคุณควรประกาศการพึ่งพา libcurl4 หรือบอกผู้ใช้ของคุณให้ sudo apt-get libcurl4 และเช่นเคยหากคุณเรียนรู้สิ่งต่าง ๆ ที่จะช่วยผู้ใช้ในอนาคตโปรดยื่นเรื่องประชาสัมพันธ์หรือปัญหา
ในฐานะที่เป็นพื้นหลังเราใช้วิธีการเชื่อมโยงกับไลบรารีแบบไดนามิกระบบปฏิบัติการสามารถให้ได้อย่างน่าเชื่อถือและการรวม (การสร้าง + การเชื่อมโยงแบบคงที่) เป็นอย่างอื่น Linux เป็นกรณีพิเศษเนื่องจากมีระบบการจัดการการพึ่งพาที่ยอดเยี่ยมในตัวดังนั้นจึงสามารถให้ห้องสมุดได้อย่างน่าเชื่อถือมากกว่าที่ส่งไปพร้อมกับระบบปฏิบัติการ
นอกเหนือจาก: มันทำให้เรามีโอกาสที่นี่สำหรับการขยาย Bazel ที่จะช่วยให้ Bazel รองรับผู้จัดการแพ็คเกจ Linux ได้ดีขึ้น โปรดดูข้อเสนอนี้หากคุณสนใจในสิ่งนั้นหรือช่วยแฮ็ค มาอภิปรายต่อเรื่องปัญหานั้นต่อไปไม่ว่า Google จะสนใจนำไปใช้กับตัวเองหรือไม่
เพิ่ม "@cpr" ลงใน deps ของคุณและใช้อินเทอร์เฟซ LIBCPR ที่ยอดเยี่ยม!
โปรดดูเอกสารของพวกเขาสำหรับรายละเอียด แต่อินเทอร์เฟซนั้นมีความสุขอย่างแท้จริง เป็นตัวอย่าง:
# include < cpr/cpr.h >
cpr::Response r = cpr::Get(cpr::Url{ " https://github.com " },
cpr::Parameters{{ " key " , " value " }});สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่เราเลือกและแนะนำ CPR ให้ดู Whycpr.md
โปรดทราบว่าคุณจะต้องเปิดใช้งาน C ++ 17 ขึ้นไปหากคุณยังไม่ได้ทำ เราพอใจสิ่งนี้โดยใส่สิ่งต่อไปนี้ใน. bazelrc:
build --cxxopt=-std=gnu++20
build --per_file_copt=.*.mm$@-std=gnu++20
เพิ่ม "@curl" ลงใน deps ของคุณและใช้ libcurl ในทั้งหมดมันเป็นความรุ่งโรจน์ปกติ (ตัวอย่างเอกสาร)
... หรือเพียงแค่ใช้อินเทอร์เฟซ C ของคุณใน C ++ (ใช้ extern "C" ) และใช้ LIBCPR
แต่เรามีข้อเสนอแนะ ...
การปรับปรุงมาถึงไลบรารี่พื้นฐานรวมถึงแพตช์ความปลอดภัยดังนั้นเราขอแนะนำให้ติดตามทันสมัย
เราขอแนะนำอย่างยิ่งให้คุณตั้งค่าการปรับปรุง (หรือคล้ายกัน) ในบางจุดเพื่อให้การพึ่งพานี้ (และอื่น ๆ ) ทันสมัยโดยค่าเริ่มต้น [เราไม่ได้มีส่วนเกี่ยวข้องกับการปรับปรุงใหม่หรืออะไร แต่เราคิดว่ามันยอดเยี่ยม มันดูเวอร์ชันใหม่และส่ง PRS ให้คุณเพื่อตรวจสอบหรือทดสอบอัตโนมัติ ฟรีและง่ายต่อการติดตั้ง มันมีประโยชน์อย่างน่าประหลาดใจใน codebase ของเราและเราได้ทำงานร่วมกับผู้ดูแลที่ยอดเยี่ยมเพื่อทำให้สิ่งต่าง ๆ ดีสำหรับการใช้งาน Bazel และใช้ในที่เก็บ Bazel อย่างเป็นทางการ-และอันนี้!]
ถ้าไม่ใช่ตอนนี้อาจจะกลับมาที่ขั้นตอนนี้ในภายหลังหรือดู repo นี้สำหรับการอัปเดต [หรือเฮ้อาจจะให้ดาราอย่างรวดเร็วแก่เราในขณะที่คุณกำลังคิดจะดู] เหมือน Abseil เราอยู่ที่หัว ความมุ่งมั่นล่าสุดกับสาขาหลักคือการกระทำที่คุณต้องการ ดังนั้นอย่าพึ่งพาการแจ้งเตือน ใช้การปรับปรุงหรือโพลด้วยตนเองสำหรับคณะกรรมการใหม่
วิธีที่จะทำให้ผ่านการตั้งค่า ไชโยที่จะสามารถใช้พลังของเว็บจาก C ++ ได้อย่างง่ายดาย!
สิ่งนี้ควรใช้งานได้อย่างราบรื่นสำหรับ MacOS, Linux, Android, iOS, WatchOs และ TVOS
หากคุณต้องการสำหรับ Windows เราชอบความช่วยเหลือของคุณ ควรเพิ่มการสนับสนุนให้ง่ายกว่าที่จะทำเองตั้งแต่เริ่มต้น เราจะช่วยแนะนำ และรหัสของคุณจะทำงานข้ามแพลตฟอร์มได้ฟรี นอกจากนี้คุณจะช่วยเหลือทุกคน โปรดติดต่อปัญหาเมื่อคุณเริ่มต้นมันเพียงเพื่อให้แน่ใจว่าผู้คนไม่ได้ทำซ้ำความพยายาม
หากคุณใช้ Bazel สำหรับ C หรือ C ++ คุณอาจต้องการเครื่องมืออื่น ๆ ของเราเช่น ...