这个项目试图为我做什么?
使从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 ++,则可能还需要我们的其他一些工具,例如...