Как я должен предоставить разработчикам двоичные файлы библиотеки?

0

Я хочу облегчить работу других пользователей в моем репозитории. Однако, поскольку некоторые из скомпилированных зависимостей имеют размер более 100 МБ, я не могу включить их в репозиторий. Github отклоняет эти файлы.

Каков наилучший способ обработки больших двоичных файлов зависимостей? Построение библиотек из источника непросто под Windows и занимает много часов. Я не хочу, чтобы каждый разработчик боролся с этим процессом.

  • 0
    У вас действительно нет выбора, если ваш проект с открытым исходным кодом. Попытка упаковать предварительно собранные двоичные файлы не очень хорошая идея из-за различий версий компилятора и библиотеки на разных компьютерах.
  • 0
    @dauphic Я использовал подкаталоги для всех комбинаций сборки, например, bin/windows-vs12-x86-debug/v8.lib . Некоторые из моих библиотек изначально не совместимы с некоторыми компиляторами, и я не могу ожидать, что каждый другой разработчик снова применяет эти обходные пути.
Теги:
github
cross-platform
dependencies
binaries

1 ответ

1

Недавно я работал над использованием Ivy (http://ant.apache.org/ivy/) с бинарниками C++. Основная идея заключается в том, что вы создаете двоичные файлы для каждой комбинации сборки. Затем вы закроете каждую комбинацию сборки в файл с именем, например mypackage-windows-vs12-x86-debug.zip. В вашем ivy.xml вы свяжете каждый zip файл с помощью одной конфигурации (например: windows-vs12-x86-debug). Затем вы публикуете этот пакет из нескольких ZIP файлов в репозиторий Ivy. Вы можете либо разместить репо самостоятельно, либо попытаться загрузить его на существующий репозиторий Ivy. Вы должны создать пакет zip файлов для каждой зависимости, а файлы ivy.xml будут описывать цепочку зависимостей между всеми пакетами.

Затем ваши разработчики должны настроить Ivy. В своих файлах ivy.xml они перечислит ваш пакет как зависимость, а также необходимую им конфигурацию (например: windows-vs12-x86-debug). Им также потребуется добавить шаг ivy resolve/retrieve для их сборки. Ivy загрузит zip файлы для вашего пакета и все, от чего зависит ваш пакет. Затем им нужно будет настроить распаковку и перемещение задач в своих сборках для извлечения двоичных файлов, которые вы предоставляете, и поместить их в места, которые ожидают их сборки.

Ivy - отличный инструмент, но он определенно оптимизирован для Java, а не для C++. Когда все это настроено, это очень здорово. Однако, по моему опыту как человека, который вообще не знаком с DevOps, интеграция его в сборку C++ была сложной задачей. Я обнаружил, что проще всего создавать простые муравьиные задачи, которые выполняют требуемые действия плюща, а затем использовать мою "регулярную" систему сборки (make), чтобы вызвать эти муравьиные задачи, когда это необходимо.

Поэтому я должен также упомянуть, что причина, по которой я изучал использование Ivy, заключалась в том, что я реализовывал это в корпоративной среде, где я не мог изменить системные файлы. Если вы и ваши разработчики можете это сделать, вам может быть лучше с системой RPM/APT. Вы создали репо и попросите своих разработчиков добавить ваше репо в соответствующий файл конфигурации RPM/APT. Затем они будут запускать команды, такие как sudo apt-get install mypackage и apt-get выполнит всю работу по загрузке и установке правильных файлов в нужном месте. Я не знаю, как это будет работать на Windows, возможно, кто-то создал клиент RPM/APT для Windows.

  • 0
    Айви звучит интересно, я посмотрю на это. К сожалению, в Windows нет менеджера пакетов. Обработка межплатформенных зависимостей была бы намного проще.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню