這個項目試圖為我做什麼?
使從C ++(或C)發出HTTPS請求的簡單枯竭。
為什麼使用此項目獲取C ++ HTTPS客戶庫庫?
C ++是開箱即用的著名網絡支持。如果您正在閱讀本文,我們懷疑您處於同一位置:我們需要為自己填補這個洞,並且對我們看到的其他選擇不滿意。我們之所以編寫此代碼,是因為我們看到的所有其他Bazel規則都有嚴重的問題包裝捲曲,無論是Tensorflow的文件中的錯誤配置,導致內存錯誤還是無法正確處理Bazel設置或交叉編譯的CMAKE包裝。這裡的目標是創建一個易於重複使用的組件,使其適合每個人。
基本設置時間:2M
Howdy,Bazel用戶?讓您立即提出HTTPS請求。
這裡有很多文字,但這僅僅是因為我們試圖闡明事情並使它們變得容易。如果您有問題,請告訴我們;我們希望您的幫助使事情變得更好,更完整 - 我們很樂意為您提供幫助!
將其複製到您的Bazel WORKSPACE文件中,以將其添加為外部依賴性,並確保根據以下說明更新為最新提交。
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 ()與Bazel中所有依賴平台的C/C ++一樣,您需要使用Bazel 7+(以及類似的最新版本的Rules_apple)進行每個平台配置,以自動開箱即用。 (如果Bazel 7現在已經很舊以至於是標準的,請提交PR以刪除本節。)
您需要確保安裝了Libcurl開發標頭,以便可以從代碼中使用它們。
運行sudo apt-get install libcurl4-openssl-dev (debian/ubuntu)或與您的分發相同的。有關其他發行版的安裝說明,請參見Libcurl條目:https://everything.curl.dev/get/linux。如果您基於代碼分發二進制軟件包,則應聲明對libcurl4的依賴性,或者以其他方式告訴您的用戶訪問sudo apt-get libcurl4 。而且,與往常一樣,如果您學習可以幫助未來用戶的知識,請提交公關或問題。
作為背景,我們採取了與OS可以可靠地提供和捆綁(構建 +靜態鏈接)的庫進行動態鏈接的方法。 Linux是一種特殊情況,因為內置了一個很好的依賴性管理系統,因此它可以可靠地提供比使用OS發貨更多的庫。
撇開:這讓我們感到有機會提供Bazel Extension,這將使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 ++(使用extern "C" )中實現C接口並使用libcpr。
但是我們確實有建議...
包括安全補丁在內的基礎庫經常進行改進,因此我們建議保持最新。
我們強烈建議您在某個時候設置翻新(或類似)的裝修(或類似),以默認情況下保持這種依賴性(和其他)。 [我們沒有隸屬於翻新或其他任何東西,但我們認為這很棒。它觀看新版本,並向您發送PRS以進行審查或自動測試。它是免費的,易於設置。它在我們的代碼庫中非常有用,我們已經與出色的維護者合作,使其非常適合Bazel使用。它用於官方的Bazel存儲庫,這是一個! ]
如果不是現在,也許稍後再回到此步驟,或者觀看此存儲庫以獲取更新。 [或者,當您在考慮觀看時,也許給我們一個快速的明星。 ]像Abseil一樣,我們住在頭上;主要分支的最新提交是您想要的提交。因此,不要依靠發布通知;使用翻新或手動進行新的提交。
通過設置使其實現。歡呼,能夠輕鬆地從C ++使用網絡的功能!
這應該適用於MacOS,Linux,Android,iOS,WatchOS和TVOS無縫。
如果您想要Windows,我們會喜歡您的幫助。添加支持要比從頭開始進行的支持要容易得多。我們將幫助指導。然後,您的代碼將免費跨平台工作。另外,您將幫助所有人。當您開始啟動問題時,請與之聯繫,以確保人們不復制努力。
如果您將Bazel用於C或C ++,則可能還需要我們的其他一些工具,例如...