Proyek apa yang coba dilakukan untuk saya?
Jadikan mati mudah untuk membuat permintaan HTTPS dari C ++ (atau C).
Mengapa menggunakan proyek ini untuk mendapatkan Perpustakaan Klien C ++ HTTPS?
C ++ terkenal kehilangan dukungan jaringan di luar kotak. Jika Anda membaca ini, kami menduga Anda berada di posisi yang sama kami: kami perlu mengisi lubang itu untuk diri kami sendiri dan tidak puas dengan opsi lain yang kami lihat. Kami menulis kode ini karena semua aturan bazel lain yang kami lihat memiliki masalah serius membungkus keriting, apakah itu salah konfigurasi dalam file TensorFlow yang menyebabkan kesalahan memori atau pembungkus CMake yang tidak menangani pengaturan bazel atau kompilasi silang dengan benar. Tujuannya di sini adalah untuk membuat komponen yang mudah digunakan kembali yang membuatnya tepat untuk semua orang.
Waktu Pengaturan Dasar: 2m
Howdy, pengguna Bazel ?. Mari Anda membuat Anda membuat permintaan HTTPS dalam waktu singkat.
Ada banyak teks di sini tetapi hanya karena kami mencoba untuk menjelaskan dan membuatnya mudah. Jika Anda memiliki masalah, beri tahu kami; Kami akan menyukai bantuan Anda membuat segalanya menjadi lebih baik dan lebih lengkap - dan kami ingin membantu Anda!
Salin ini ke file Bazel WORKSPACE Anda untuk menambahkan repo ini sebagai ketergantungan eksternal, pastikan untuk memperbarui ke komit terbaru sesuai instruksi di bawah ini.
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 ()Seperti halnya semua C/C ++ yang bergantung pada platform di Bazel, Anda harus menggunakan Bazel 7+ (dan versi aturan_apple yang serupa) untuk konfigurasi per-platform agar bekerja secara otomatis di luar kotak. (Harap ajukan PR untuk menghapus bagian ini jika Bazel 7 sekarang sudah tua untuk menjadi standar.)
Anda harus memastikan bahwa Anda memiliki header pengembangan libcurl yang diinstal sehingga Anda dapat menggunakannya dari kode Anda.
Jalankan sudo apt-get install libcurl4-openssl-dev (debian/ubuntu) atau yang setara dengan distribusi Anda. Untuk menginstal instruksi untuk distribusi lain, lihat entri libcurl di sini: https://everything.curl.dev/get/linux. Jika Anda mendistribusikan paket biner berdasarkan kode Anda, Anda harus menyatakan ketergantungan pada libcurl4 atau memberi tahu pengguna Anda ke sudo apt-get libcurl4 . Dan, seperti biasa, jika Anda mempelajari hal -hal yang akan membantu pengguna di masa depan, silakan mengajukan PR atau masalah.
Sebagai latar belakang, kami mengambil pendekatan menghubungkan secara dinamis terhadap perpustakaan yang dapat disediakan oleh OS dengan andal, dan bundling (membangun + secara statis menghubungkan) sebaliknya. Linux adalah kasus khusus karena ada sistem manajemen ketergantungan yang hebat yang dibangun, sehingga dapat memberikan lebih banyak perpustakaan daripada yang dikirimkan dengan OS.
Selain itu: mengejutkan kami bahwa ada peluang di sini untuk ekstensi Bazel yang akan memungkinkan Bazel mendukung manajer paket Linux yang lebih baik. Silakan lihat proposal ini jika Anda tertarik pada hal itu atau membantu meretasnya. Mari kita lanjutkan diskusi tentang masalah itu, apakah Google tertarik untuk mengimplementasikannya sendiri atau tidak.
Tambahkan "@cpr" ke deps Anda, dan gunakan antarmuka LIBCPR yang indah!
Silakan lihat dokumen mereka untuk detailnya, tetapi antarmuka benar -benar ergonomis. Sebagai contoh:
# include < cpr/cpr.h >
cpr::Response r = cpr::Get(cpr::Url{ " https://github.com " },
cpr::Parameters{{ " key " , " value " }});Untuk lebih lanjut tentang mengapa kami memilih dan merekomendasikan CPR, lihat Whycpr.md
Perhatikan bahwa Anda perlu mengaktifkan C ++ 17 atau lebih, jika Anda belum melakukannya. Kami memuaskan ini dengan menempatkan yang berikut ini di .Bazelrc kami:
build --cxxopt=-std=gnu++20
build --per_file_copt=.*.mm$@-std=gnu++20
Tambahkan "@curl" ke deps Anda, dan gunakan libcurl di semua kemuliaan biasa (contoh, dokumen).
... Atau cukup implementasikan antarmuka C Anda di C ++ (menggunakan extern "C" ) dan gunakan libcpr.
Tapi kami punya saran ...
Perbaikan sering datang ke perpustakaan yang mendasarinya, termasuk patch keamanan, jadi kami akan merekomendasikan untuk tetap terbaru.
Kami sangat menyarankan Anda mengatur renovasi (atau serupa) di beberapa titik untuk menjaga ketergantungan ini (dan lainnya) tetap mutakhir secara default. [Kami tidak berafiliasi dengan renovasi atau apa pun, tapi kami pikir itu luar biasa. Ini mengawasi versi baru dan mengirimi Anda PR untuk ditinjau atau pengujian otomatis. Gratis dan mudah diatur. Sangat berguna dalam basis kode kami, dan kami telah bekerja dengan pengelola yang luar biasa untuk membuat segalanya bagus untuk penggunaan bazel. Dan itu digunakan dalam repositori Bazel resmi-dan yang ini!]
Jika tidak sekarang, mungkin kembali ke langkah ini nanti, atau tonton repo ini untuk pembaruan. [Atau hei, mungkin beri kami bintang cepat, saat Anda berpikir untuk menonton.] Seperti Abseil, kami hidup di kepala; Komitmen terbaru ke cabang utama adalah komitmen yang Anda inginkan. Jadi jangan mengandalkan pemberitahuan rilis; Gunakan renovasi atau jajak pendapat secara manual untuk komit baru.
Cara untuk membuatnya melalui pengaturan. Cheers untuk dapat dengan mudah menggunakan kekuatan web dari C ++!
Ini harus bekerja dengan mulus untuk macOS, Linux, Android, iOS, WatchOS, dan TVOS.
Jika Anda menyukainya untuk Windows, kami akan menyukai bantuan Anda. Seharusnya sedikit lebih mudah untuk menambahkan dukungan daripada melakukannya sendiri dari awal. Kami akan membantu panduan. Dan kode Anda kemudian akan bekerja di seluruh platform secara gratis. Plus, Anda akan membantu semua orang. Silakan jangkau masalah ini saat Anda memulainya, hanya untuk memastikan orang tidak menduplikasi upaya.
Jika Anda menggunakan bazel untuk C atau C ++, Anda mungkin juga ingin beberapa alat kami yang lain, seperti ...