У меня сложилось впечатление, что этот вопрос задавался примерно сто раз, но так и не был дан полный ответ.
Я работаю над небольшим проектом, который в какой-то момент должен быть выпущен для больших трех платформ ПК (Windows, Mac & GNU / Linux), так что заблаговременно связываться с технологиями — плохая идея. К счастью, но, к сожалению, сейчас, на ранних этапах разработки, мы ориентируемся только на 32-битную Windows.
На уровне кода кроссплатформенная разработка относительно проста, если вы выбираете правильные библиотеки. Также сборка программного обеспечения на нескольких платформах относительно проста, я изучаю использование GYP или CMake.
Проблема в зависимостях. Для сборки проекта вам понадобятся: SDL, SDL_image, SDL_ttf, iconv, libxml2, libxmlmm, sigc ++, wxWidgets, glew, bullet, openALsoft и, возможно, другие будут добавлены позже.
Пока что я нашел три варианта:
Первое похоже на излишество, так как вам нужно в основном поддерживать свой форк библиотеки и свою систему сборки.
Второй вариант звучит как то, что нужно делать, когда ваша цель только одна или, может быть, две платформы. Но если вы посчитаете все разные цели, включая 32/64 битные варианты, это также начнет превращаться во что-то едва управляемое.
Третий вариант зависит от окружающей среды. Если вы позволите своим разработчикам обрабатывать зависимости вручную, вы никогда не будете спать по ночам. Просто создать и подготовить к использованию каждую зависимость практически невозможно. Не говоря уже о том, что вы не можете гарантировать, что каждый разработчик использует правильную версию.
Если вы посмотрите на другие языки, они решают проблему по-другому. В таких системах, как npm, marvin или phing, вы сохраняете только некоторый файл конфигурации в проекте, а затем инструменты извлекают все необходимые зависимости.
Я думал о централизованном построении зависимостей, упаковке их в zip / deb / rpm / независимо от пакетов и помещении их в репозиторий. Затем каждый разработчик будет копировать зависимости для своей платформы в репозиторий (но не регистрировать их) перед сборкой. Это будет сделано предпочтительно автоматически в качестве шага перед сборкой.
Особенно мне не нужна дополнительная система сборки. Я огляделся вокруг, и единственное, что удаленно делает то, что я хочу, это Айви. Но либо я что-то упустил, либо Айви полностью закончила проблему. Существует ли что-то простое для решения этой проблемы?
Я в нескольких дюймах строю свой собственный.
Я бы рекомендовал не строить свои собственные.
Мы используем ant / ivy / Hudson для автоматизации наших кроссплатформенных сборок (Windows и Linux). Мы также используем Nexus (Maven) в качестве нашего репозитория артефактов, который содержит специфичные для платформы сборки наших сторонних библиотек, а также наше собственное приложение. Hudson полностью интегрируется с Perforce (наше хранилище программного обеспечения).
Мы также находимся в процессе создания отдельных 32-битных и 64-битных артефактов всего, и ant / ivy значительно облегчит это.
Это отлично сработало для нас.
Других решений пока нет …