Обработка зависимостей C ++ (кроссплатформенность)

У меня сложилось впечатление, что этот вопрос задавался примерно сто раз, но так и не был дан полный ответ.

Я работаю над небольшим проектом, который в какой-то момент должен быть выпущен для больших трех платформ ПК (Windows, Mac & GNU / Linux), так что заблаговременно связываться с технологиями — плохая идея. К счастью, но, к сожалению, сейчас, на ранних этапах разработки, мы ориентируемся только на 32-битную Windows.

На уровне кода кроссплатформенная разработка относительно проста, если вы выбираете правильные библиотеки. Также сборка программного обеспечения на нескольких платформах относительно проста, я изучаю использование GYP или CMake.

Проблема в зависимостях. Для сборки проекта вам понадобятся: SDL, SDL_image, SDL_ttf, iconv, libxml2, libxmlmm, sigc ++, wxWidgets, glew, bullet, openALsoft и, возможно, другие будут добавлены позже.

Пока что я нашел три варианта:

  1. проверить в источниках и построить их как часть проекта
  2. проверить в двоичных файлах
  3. управлять зависимостями за пределами исходного дерева

Первое похоже на излишество, так как вам нужно в основном поддерживать свой форк библиотеки и свою систему сборки.

Второй вариант звучит как то, что нужно делать, когда ваша цель только одна или, может быть, две платформы. Но если вы посчитаете все разные цели, включая 32/64 битные варианты, это также начнет превращаться во что-то едва управляемое.

Третий вариант зависит от окружающей среды. Если вы позволите своим разработчикам обрабатывать зависимости вручную, вы никогда не будете спать по ночам. Просто создать и подготовить к использованию каждую зависимость практически невозможно. Не говоря уже о том, что вы не можете гарантировать, что каждый разработчик использует правильную версию.

Если вы посмотрите на другие языки, они решают проблему по-другому. В таких системах, как npm, marvin или phing, вы сохраняете только некоторый файл конфигурации в проекте, а затем инструменты извлекают все необходимые зависимости.

Я думал о централизованном построении зависимостей, упаковке их в zip / deb / rpm / независимо от пакетов и помещении их в репозиторий. Затем каждый разработчик будет копировать зависимости для своей платформы в репозиторий (но не регистрировать их) перед сборкой. Это будет сделано предпочтительно автоматически в качестве шага перед сборкой.

Особенно мне не нужна дополнительная система сборки. Я огляделся вокруг, и единственное, что удаленно делает то, что я хочу, это Айви. Но либо я что-то упустил, либо Айви полностью закончила проблему. Существует ли что-то простое для решения этой проблемы?

Я в нескольких дюймах строю свой собственный.

9

Решение

Я бы рекомендовал не строить свои собственные.

Мы используем ant / ivy / Hudson для автоматизации наших кроссплатформенных сборок (Windows и Linux). Мы также используем Nexus (Maven) в качестве нашего репозитория артефактов, который содержит специфичные для платформы сборки наших сторонних библиотек, а также наше собственное приложение. Hudson полностью интегрируется с Perforce (наше хранилище программного обеспечения).

Мы также находимся в процессе создания отдельных 32-битных и 64-битных артефактов всего, и ant / ivy значительно облегчит это.

Это отлично сработало для нас.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector