ما الذي يحاول هذا المشروع القيام به من أجلي؟
اجعل من السهل تقديم طلبات HTTPS من C ++ (أو C).
لماذا تستخدم هذا المشروع للحصول على مكتبة عميل C ++ HTTPS؟
C ++ مشهور في مفقود دعم الشبكات خارج الصندوق. إذا كنت تقرأ هذا ، نشك في أنك في نفس الموقف الذي كنا فيه: كنا بحاجة لملء تلك الحفرة لأنفسنا ولم نكن راضين عن الخيارات الأخرى التي رأيناها. لقد كتبنا هذا الرمز لأن جميع قواعد Bazel الأخرى التي رأيناها لديها مشاكل خطيرة في التفاف حليقة ، سواء كان هذا هو التكوين الخاطئ في ملف TensorFlow الذي يسبب أخطاء الذاكرة أو أغلفة Cmake التي لا تتعامل بشكل صحيح مع إعدادات البازل أو التجميع المتقاطع. الهدف هنا هو إنشاء مكون قابل لإعادة الاستخدام بسهولة يحصل عليه بشكل صحيح للجميع.
وقت الإعداد الأساسي: 2M
مرحبا ، مستخدم بازل؟ دعنا نطلب منك تقديم طلب HTTPS في أي وقت من الأوقات.
هناك مجموعة من النص هنا ولكن فقط لأننا نحاول تهجئة الأمور ونجعلها سهلة. إذا كان لديك مشاكل ، فأخبرنا بذلك ؛ نحن نحب مساعدتك في جعل الأشياء أفضل وأكثر اكتمالا - ونحب مساعدتك!
انسخ هذا إلى ملف WORKSPACE Bazel الخاص بك لإضافة هذا الريبو كاعتماد خارجي ، مع التأكد من التحديث لأحدث الالتزام لكل الإرشادات أدناه.
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) لتكوين لكل منصة للعمل تلقائيًا خارج المربع. (يرجى تقديم العلاقات العامة لحذف هذا القسم إذا كان Bazel 7 قديمًا جدًا بحيث يكون قياسيًا.)
ستحتاج إلى التأكد من تثبيت رؤوس تطوير libcurl حتى تتمكن من استخدامها من الرمز الخاص بك.
قم بتشغيل sudo apt-get install libcurl4-openssl-dev (Debian/Ubuntu) أو ما يعادل توزيعك. للحصول على تعليمات التثبيت للتوزيعات الأخرى ، راجع إدخالات libcurl هنا: https://everything.curl.dev/get/linux. إذا قمت بتوزيع حزمة ثنائية بناءً على الكود الخاص بك ، فيجب عليك الإعلان عن الاعتماد على libcurl4 أو أخبر مستخدميك بطريقة أخرى بـ sudo apt-get libcurl4 . وكما هو الحال دائمًا ، إذا تعلمت أشياء من شأنها أن تساعد المستخدمين في المستقبل ، فيرجى تقديم PR أو مشكلة.
كخلفية ، نأخذ نهج الارتباط ديناميكيًا ضد المكتبات التي يمكن أن يوفرها نظام التشغيل بشكل موثوق ، وتجميع (Building + الارتباط بشكل ثابت) خلاف ذلك. يعد Linux حالة خاصة لأن هناك نظامًا رائعًا لإدارة التبعية مدمج ، بحيث يمكنه توفير المزيد من المكتبات بشكل موثوق أكثر من شحنها مع نظام التشغيل.
جانبا: من المفترض أن تكون هناك فرصة هنا لتمديد بازل من شأنها أن تتيح 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 للمراجعة أو الاختبار الآلي. إنه مجاني وسهل الإعداد. لقد كان مفيدًا بشكل مذهل في قاعدة كودنا ، وقد عملنا مع المشرف الرائع لجعل الأمور رائعة لاستخدام البازل. ويستخدم في مستودعات الأجزاء الرسمية-وهذا واحد!]
إذا لم يكن الأمر الآن ، فربما تعود إلى هذه الخطوة لاحقًا ، أو شاهد هذا الريبو للحصول على التحديثات. [أو مهلا ، ربما امنحنا نجمًا سريعًا ، بينما كنت تفكر في المشاهدة.] مثل Abseil ، نعيش في الرأس ؛ الالتزام الأخير بالفرع الرئيسي هو الالتزام الذي تريده. لذلك لا تعتمد على إشعارات الإفراج ؛ استخدم التجديد أو الاستطلاع يدويًا للالتزامات الجديدة.
طريقة لجعلها من خلال الإعداد. هتافات لتكون قادرة على استخدام قوة الويب بسهولة من C ++!
يجب أن يعمل هذا بسلاسة مع MacOS و Linux و Android و iOS و Watchos و TVOS.
إذا كنت ترغب في ذلك في Windows ، فسنحب مساعدتك. يجب أن يكون إضافة الدعم أسهل قليلاً من القيام بذلك بنفسك من الصفر. سنساعد في التوجيه. وسيعمل الرمز الخاص بك بعد ذلك عبر المنصات مجانًا. بالإضافة إلى ذلك ، سوف تساعد الجميع على الخروج. يرجى التواصل مع المشكلة عندما تبدأ في ذلك ، فقط للتأكد من عدم تكرار الناس الجهود.
إذا كنت تستخدم Bazel لـ C أو C ++ ، فمن المحتمل أن ترغب أيضًا في بعض أدواتنا الأخرى ، مثل ...