Я не говорю о создании портативного кода. Это - больше вопрос распределения. У меня есть проект среднего размера. Это имеет несколько зависимостей от общих библиотек (например, openssl, zlib, и т.д.). Это компилирует прекрасный на моей машине, и теперь пора дать его миру.
По существу создайте разработку в его самом прекрасном. Я хочу сделать установщики для Windows, Linux, MacOSX, и т.д. Я хочу сделать загружаемый шар tar, который заставит код работать с a ./configure
и a make
(вероятно, через autoconf). Это было бы обледенение на пироге, чтобы иметь сделать опцию, которая создаст установщики.. возможно, даже кросс-скомпилируйте так установщик Windows, мог быть создан в Linux.
Какова лучшая стратегия? Где я могу ожидать проводить большую часть времени? Главный фокус должен быть autoconf или является там другими инструментами, которые могут помочь?
Я бы порекомендовал CMake . Преимущества:
make install
(я не использовал ее). Сейчас я использую CMake для всего, даже для простых тестовых проектов с Visual Studio.
Я никогда не использовал autotools, но многие другие пользователи отметили, что cmake проще в использовании.По этой причине проект KDE перешел на cmake из autotools.
Продукт, над которым я работаю, не слишком отличается от этого. Мы используем систему сборки на основе autoconf, и она работает очень хорошо.
На сегодняшний день вы будете проводить больше всего времени в поддержке пользователей. У пользовательских систем будут всевозможные морщины, которых вы не ожидаете, пока они не столкнутся с ними, и вам нужно будет добавить дополнительные параметры конфигурации для их поддержки. Со временем мы добавили опции для установки путей include и lib для каждой библиотеки, от которой мы зависим; мы добавили параметры для изменения флагов компиляции, чтобы обойти различные странные сбои в различных версиях этих библиотек (или изменения API от одной версии к другой, чем требует изменений в нашем коде), мы добавили обходные пути для того факта, что некоторые библиотеки BLAS используют интерфейс C, а некоторые используют интерфейс Fortran, поэтому, хотя они теоретически являются реализациями одной и той же библиотеки, они делают несколько вещей немного по-другому, и так далее. Вы не можете предвидеть все это заранее, и это также требует документирования, чтобы пользователи могли выяснить, какие параметры установить.
Да, и установщики действительно доставляют неудобства, потому что они обычно зависят от ОС (если только это не сценарий оболочки и вам не требуется CygWin), а места для установки обычно зависят от ОС и так далее. Это еще одна область, которая потребует времени - либо для создания хорошего установщика, либо для поддержки пользователей в настройке вручную.
Настройка кросс-компиляции, по моему опыту, того стоит (по крайней мере, для случая перехода от Linux к Windows; не уверен насчет MacOS / X) - намного проще, чем пытаться сохранить несколько разных систем сборки в синхронизировать.
В качестве альтернативы есть возможность, которую проект OpenFOAM использует для своей довольно большой библиотеки C ++, которая заключается в распространении ее вместе с «одобренным» компилятором G ++ и пакетами для всех других компонентов, чтобы они не приходится беспокоиться о разных компиляторах и так далее. Но это действительно работает только на одной ОС. Я предполагаю, что версия для Windows / MacOSX должна предоставлять предварительно настроенные образы VMWare. В некоторых случаях для этого есть что сказать ....
Используйте автоинструменты, большинство пользователей знакомы с ними (т.е. они знают, что нужно запустить ./configure && make && make install)
Для Linux/Unix/Cygwin не предоставляйте инсталляторы... исходный tar.gz будет более чем достаточно. В любом случае, каждый дистрибутив Linux имеет свои собственные правила упаковки и большинство из них знают, что нужно использовать сборки autoconf, пользователи могут иметь 32 или 64 битные системы или даже работать на PPC или Sparc - так что не беспокойтесь.
Возможно, стоит создать один deb или rpm для большинства популярных систем, но не более того...
Для Windows (родной, не cygwin) предоставьте двоичные файлы. Установка Migw+auto довольно болезненна, а пользователи windows обычно больше "next->next->next" пользователи, чем "wget/tar/configure/make/make-install" пользователи" Предоставьте zip или какой-нибудь установщик, есть некоторые FOSS установщики.
Помните, что бедные пользователи Windows по умолчанию не имеют zlib или openssl... Так что вам придется поставлять их вместе с пакетом.
О CMake...
Если вы ориентируетесь в основном на платформу Windows или готовы поддерживать MSVC, то, вероятно, вам стоит рассмотреть его. В противном случае, автоинструменты обеспечивают хорошую альтернативу дистрибуции и сборке.