CMake/CPack: предпочтительные генераторы пакетов для разных платформ

Я хочу распространять исполняемые файлы и библиотеки проекта C/C++ в Linux, OSX и Windows. Каковы предпочтительные генераторы CPack, т.е. которые, вероятно, будут доступны для большинства пользователей? В Windows есть только NSIS, но в Linux и OSX есть несколько альтернатив. Кстати, исходный дистрибутив также генерируется, поэтому теоретически пользователи всех платформ должны иметь возможность самостоятельно скомпилировать код, но мы хотим предоставить предварительно скомпилированные двоичные файлы для удобства.


person mattmilten    schedule 02.09.2017    source источник
comment
Итак, дело в том, что, хотя пользователи Windows привыкли к этому, в Linux вы обычно избегаете упаковки всех библиотек с вашим исполняемым файлом. Таким образом, установщики в стиле Windows — редкость в мире Linux. Вы просто упаковываете свое программное обеспечение в виде пакетов дистрибутива в репозитории вашего дистрибутива, чтобы вы могли (в стиле Debian) apt-get install matts_amazing_software или (в стиле Fedora) dnf install matts_a... или (в стиле Gentoo) emerge matts_a.... Думайте об этих пакетах как об установщиках .msi в Windows, только они связаны с библиотеками, которые уже есть в дистрибутивах…   -  person Marcus Müller    schedule 02.09.2017
comment
… так что у вас не будет четырех миллионов разных libdepency.dll, как в Windows. Таким образом, для среднего пользователя Linux установка программного обеспечения осуществляется централизованно, и вы никогда не загружаете двоичный установщик вручную. Недостатком этого является то, что пакеты должны быть разными для каждого дистрибутива, потому что каждый дистрибутив поставляется с разными наборами библиотек. Если вы действительно хотите, загляните в flatpack, но мне лично не нравится идея сделать экосистему программного обеспечения Linux такой же разделенной, несовместимой и сломанной, как экосистема Windows.   -  person Marcus Müller    schedule 02.09.2017


Ответы (1)


На каждой из разных платформ есть несколько общих практик. Какой из них лучше для вас, будет зависеть от множества факторов, но, по крайней мере, следующее должно помочь выбрать один из наиболее популярных форматов, для которых CMake/CPack имеет прямую поддержку. Я предполагаю, что вы используете CPack через CMake (т.е. через модуль CPack, возможно, с компонентами пакета, также использующими модуль CPackComponent).

Windows:

  • генератор пакетов NSIS создает исполняемые установщики, к которым привыкли обычные пользователи. . Они поддерживают установку на основе компонентов, поэтому вы можете предоставить исходный код в качестве дополнительного компонента. Поддержка CMake для этого генератора пакетов достаточно зрелая, но, возможно, в последнее время этот метод становится менее предпочтительным.
  • генератор пакетов WIX создает установщики MSI. Поддержка этого новее и, кажется, более активна с точки зрения разработки функций и т. Д. Он также поддерживает установку на основе компонентов и, похоже, становится предпочтительным форматом по сравнению с NSIS.

Mac

Для Mac есть несколько вариантов на выбор, но какой из них наиболее подходит, зависит от того, что вы хотите упаковать. Если вы просто хотите предоставить один пакет приложений, генератор пакетов DMG (также иногда называемый генератором DragNDrop), вероятно, то, что вам нужно. Пользователи хорошо знакомы с ними, и они просты в использовании. Избегайте генератора пакетов, поскольку он устарел и поддерживает более ограниченные возможности. , вместо этого следует предпочесть генератор DMG.

Для пакетов, содержащих более одного пакета, генератор DMG по-прежнему потенциально подходит, но правильный установщик может быть более подходящим. До недавнего времени генератор PackageMaker был основным генератором для этого , но он был заменен генератором ProductBuild (поддерживается CMake с версия 3.7).

Линукс

В системах на основе RedHat RPM обычно является предпочтительным форматом пакета (используйте генератор RPM), тогда как для систем на базе Debian предпочтительнее использовать формат DEB (используйте Генератор DEB). Системы на базе Debian могут поддерживать RPM с помощью таких инструментов, как Alien, но пользователи почти всегда предпочитают родной формат DEB. Если вы готовы предоставить и то, и другое, вы можете удовлетворить оба лагеря, но обратите внимание, что вам придется уделять особое внимание двоичной совместимости. Простые пакеты раньше могли быть собраны на основе LSB (база стандартов Linux) для создания единого RPM. это будет работать на всех основных дистрибутивах Linux (даже на основе Debian), но LSB на самом деле не поспевает за последними разработками и никогда не поддерживал полный набор функций, необходимых большинству сложных приложений (или версии пакетов, которые они предоставляли). были слишком стары). Однако LSB предоставляет очень полезные инструменты, такие как проверка приложений для оценки того, построенных (любыми средствами) будут отсутствовать символы и т. д. в различных дистрибутивах Linux.

Обратите внимание, что для Linux вы должны различать, нацеливаете ли вы пакеты для включения в сами дистрибутивы Linux или ожидаете, что пользователи будут загружать и устанавливать пакеты вне системы пакетов дистрибутива. Более крупные независимые коммерческие программные продукты, как правило, распространяются как отдельные пакеты, включая соответствующие библиотеки и т. д., и устанавливаются по умолчанию под /opt (если они следуют рекомендациям, подобным тем, которые поддерживаются LSB и Стандарт иерархии файловой системы — FHS (PDF)). В идеале вы должны сделать свои пакеты перемещаемыми, чтобы сопровождающим дистрибутива было легче адаптировать ваш метод упаковки к требованиям своего дистрибутива.

RPM и DEB в некоторой степени поддерживают исходные пакеты.

Кроссплатформенность

  • Некоторые предпочитают генератор пакетов IFW как способ создания установщиков, которые иметь одинаковый внешний вид на всех платформах. Он также довольно прогрессивен, предлагая поддержку таких функций, как загружаемые компоненты. Если вас интересует простой в использовании графический установщик для всех платформ, то этот, вероятно, то, что вы ищете.
  • Генератор архивных пакетов обеспечивает поддержку таких архивов, как ZIP, tarballs, 7z и более. Это очень простые форматы, которые просто объединяют ваши файлы в один архив. У них нет полезных функций, таких как интеграция с рабочим столом, предварительная/послеустановка и удаление, но они удобны в качестве второго альтернативного формата пакета одному из вышеперечисленных. В частности, они могут быть полезны для пользователей, у которых нет прав администратора в своих системах и которые хотят просто распаковать в удобное место.
person Craig Scott    schedule 02.09.2017
comment
Для Windows NSIS намного проще в использовании и более переносим, ​​чем WIX. Таким образом, он часто используется для розничных/обычных пользователей. WIX становится все более востребованным или даже обязательным для корпоративного программного обеспечения благодаря расширенным установкам MSI, гибкости и интеграции с программными службами Windows. - person utopia; 02.09.2017