Сначала убедитесь, что ваш проект хорошо установлен, включая исполняемые файлы, заголовки, зависимости времени выполнения. Если вы используете что-то вроде cmake, это вопрос установки вещей на CMAKE_INSTALL_PREFIX
с возможностью добавления GnuInstallDirs . Если вы используете make
, вам нужно убедиться, что make install --prefix=...
работает хорошо.
Отсюда вы можете настроить таргетинг на каждую платформу независимо. Относитесь к упаковке независимо от вашего проекта. Как упоминал Чипстер, создание rpm
файлов не так уж сложно. Файлы deb
для ОС на основе Debian, tar.xz
файлы для ОС на основе Arch похожи. Правила для создания этих пакетов могут использовать ваши install
правила для создания пакета. Вы упомянули Mingw. Если вы нацелены на msys
дистрибутив mingw для Windows, то пакет pacman на основе Arch будет работать и на msys. Вы можете медленно работать над поддержкой одной платформы за раз, практически не внося изменений в ваш настоящий проект.
Обычно в мире программного обеспечения с открытым исходным кодом люди выпускают файл tar.gz
, поддерживающий ./configure && make && make install
или аналогичный. Затем кто-то, связанный с платформой (например, разработчик Debian) найдет ваш проект, создаст для него некоторые правила упаковки и выпустит его в свой дистрибутив. Это означает, что ваш проект может полностью зависеть от места его выпуска. Это также означает, что вам пока не нужно беспокоиться о MacOS, вы можете подождать, пока у вас не появится кто-то, кто захочет, или какое-то оборудование для его тестирования.
Если вы действительно хотите контролировать как вещи упакованы для каждой платформы изнутри вашего проекта, и вы уже используете cmake
, cpack
- отличный инструмент, который помогает. После написания cpack
правил для вашего проекта вы можете просто набрать cpack
, чтобы создать много типов развертываемых архивов. Вы не получите полученный *.deb
файл в официальных архивах Debian или Ubuntu, но по крайней мере люди, использующие эти форматы, могут установить ваш пакет.
Кроме того, рассмотрите возможность выпуска одного пакета с библиотеками времени выполнения и одного с содержимым разработки (заголовки, компилятор, библиотеки stati c). Таким образом, если кто-то использует ваш компилятор, он может перераспределить библиотеки времени выполнения, которые, вероятно, будут намного проще.