Что этот проект пытается сделать для меня?
Сделайте мертвым, чтобы сделать HTTPS -запросы из C ++ (или C).
Зачем использовать этот проект, чтобы получить клиентскую библиотеку C ++ HTTPS?
C ++ классно отсутствует сетевая поддержка из коробки. Если вы читаете это, мы подозреваем, что вы находитесь в том же положении, в котором мы были: нам нужно было заполнить эту дыру для себя и не были удовлетворены другими вариантами, которые мы видели. Мы написали этот код, потому что все другие правила Bazel, которые мы видели, имеют серьезные проблемы с обертыванием завивки, будь то неправильная конфигурация в файле TensorFlow, вызывающих ошибки памяти или обертки Cmake, которые не обрабатывают настройки Bazel или Cross Complining. Цель здесь состоит в том, чтобы создать легко многоразовый компонент, который подходит для всех.
Основное время настройки: 2M
Привет, пользователь Bazel? Давайте заставим вас сделать запрос 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+ (и аналогичную недавнюю версию Rules_apple) для конфигурации для платформы для автоматической работы из коробки. (Пожалуйста, подайте пиар, чтобы удалить этот раздел, если Bazel 7 теперь настолько старая, чтобы быть стандартным.)
Вам нужно убедиться, что у вас установлены заголовки Libcurl Development, чтобы вы могли использовать их из своего кода.
Запустите 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.
Но у нас есть предложение ...
Улучшения часто приходят в базовые библиотеки, включая исправления безопасности, поэтому мы рекомендуем поддерживать актуальность.
Мы настоятельно рекомендуем вам настроить Renovate (или аналогичный) в какой-то момент, чтобы по умолчанию поддерживать эту зависимость (и другие). [Мы не связаны с ремонтом или чем -то еще, но мы думаем, что это круто. Он наблюдает за новыми версиями и отправляет вам PRS для просмотра или автоматического тестирования. Это бесплатно и легко настроить. Это было поразительно полезно в нашей кодовой базе, и мы работали с замечательным сопровождающим, чтобы сделать все отлично для использования Bazel. И он используется в официальных репозиториях Bazel-и в этом!]
Если нет сейчас, возможно, вернитесь к этому шагу позже или посмотрите эту репо для обновлений. [Или эй, может быть, дайте нам быструю звезду, пока вы думаете о просмотре.] Как и Абсейл, мы живем в голове; Последний коммит в основной филиале - это коммит, который вы хотите. Так что не полагайтесь на уведомления о выпуске; Используйте ремонт или опрос вручную для новых коммитов.
Способ сделать это через настройку. Приветствую возможность легко использовать силу Интернета из C ++!
Это должно работать беспрепятственно для MacOS, Linux, Android, iOS, WatchOS и TVOS.
Если вам это нравится для Windows, мы бы хотели вашу помощь. Добавить поддержку должно быть немного легче, чем сделать это самостоятельно с нуля. Мы поможем руководству. И ваш код будет затем работать на платформах бесплатно. Кроме того, вы будете помогать всем. Пожалуйста, свяжитесь с этим вопросом, когда вы начнете его, просто чтобы люди не дублировали усилия.
Если вы используете Bazel для C или C ++, вы, вероятно, также захотите некоторые другие наши инструменты, например ...