【问题标题】:CMake/CPack: Preferred package generators for different platformsCMake/CPack:不同平台的首选包生成器
【发布时间】:2018-02-11 04:19:12
【问题描述】:

我想在 Linux、OSX 和 Windows 上分发 C/C++ 项目的可执行文件和库。什么是首选的 CPack 生成器,即可能对大多数用户可用?在 Windows 上似乎只有 NSIS,但在 Linux 和 OSX 上有几种替代方案。 顺便说一句,也生成了一个源代码分发,所以理论上所有平台的用户都应该能够自己编译代码,但为了方便起见,我们希望提供预编译的二进制文件。

【问题讨论】:

  • 所以重点是,虽然 Windows 用户习惯了它,但在 Linux 上,您通常会避免将所有库与可执行文件打包在一起。因此,拥有 Windows 风格的安装程序在 linux 世界中并不常见。您只需将您的软件打包为 分发包 在您的发行版的存储库中,这样您就可以(Debian 风格)apt-get install matts_amazing_software 或(Fedora 风格)dnf install matts_a... 或(Gentoo 风格) emerge matts_a...。想想那些像 Windows 上的 .msi 安装程序这样的包,只是它们链接到发行版已经带来的库......
  • ... 这样你就不会像在 Windows 上那样得到四百万个不同的libdepency.dll。因此,对于普通的 linux 用户来说,安装软件是集中式的,您永远不会手动下载二进制安装程序。这样做的缺点是每个发行版的软件包需要不同,因为每个发行版都带有不同的库集。如果您真的想要,请查看 flatpack,但我个人不喜欢让 linux 软件生态系统像 Windows 系统那样分区、不兼容和损坏的想法。

标签: linux windows macos cmake cpack


【解决方案1】:

在每个不同的平台上都有多种常见做法。哪一个最适合您将取决于多种因素,但以下内容至少应该有助于在 CMake/CPack 直接支持的更流行的格式中进行选择。我假设您正在通过 CMake 使用 CPack(即通过 CPack module,也可能与使用 CPackComponent module 的包组件一起使用)。

Windows:

  • NSIS package generator 生成普通用户习惯使用的可执行安装程序。这些支持基于组件的安装,因此您可以将源作为可选组件提供。 CMake 对这个包生成器的支持相当成熟,但最近它可能已成为一种不太受欢迎的方法。
  • WIX package generator 生成 MSI 安装程序。对此的支持较新,并且在功能开发等方面似乎更加活跃。它还支持基于组件的安装,并且似乎正在成为 NSIS 的首选格式。

苹果机

Mac 有许多选项可供选择,但哪一个最合适取决于您要打包的内容。如果您只想提供单个应用程序包,DMG package generator(有时也称为 DragNDrop 生成器)可能是您想要的。用户非常熟悉这些并且易于使用。避免使用Bundle generator,它较旧且支持的功能更有限,应首选 DMG 生成器。

对于包含多个包的软件包,DMG 生成器可能仍然合适,但适当的安装程序可能更合适。直到最近几年,PackageMaker generator 一直是它的首选生成器,但它已被 ProductBuild generator 取代(自 3.7 版起由 CMake 支持)。

Linux

在基于 RedHat 的系统上,RPM 通常是选择的包格式(使用 RPM generator),而对于基于 Debian 的系统,则首选 DEB 格式(使用 DEB generator)。基于 Debian 的系统可以使用诸如外星人之类的工具来支持 RPM,但用户几乎总是更喜欢原生 DEB 格式。如果您愿意同时提供两者,则可以让两个阵营都满意,但请注意,您必须特别注意二进制兼容性。过去,简单的软件包能够针对LSB (Linux Standards Base) 构建,以生成适用于所有主要 Linux 发行版(甚至是基于 Debian 的发行版)的单个 RPM,但 LSB 并没有真正跟上最近的发展,而且从来没有真正跟上支持最复杂的应用程序所需的全套功能(或者他们提供的软件包版本太旧)。但是,LSB 确实提供了非常有用的工具,例如 app checker,用于评估您构建的包(以任何方式)是否会在各种 Linux 发行版中丢失符号等。

请注意,对于 Linux,您应该区分您的目标是打包以包含在 Linux 发行版本身中,还是希望用户在发行版的打包系统之外下载和安装这些软件包。较大的独立商业软件产品将倾向于作为独立软件包分发,包括相关库等,并默认安装在/opt 下(如果它们遵循 LSB 和Filesystem Hierarchy Standard - FHS (PDF) 所倡导的指导方针)。理想情况下,您应该使您的包可重定位,以便分发维护人员可以更轻松地调整您的打包方法以适应他们的分发要求。

RPM 和 DEB 都在一定程度上支持源码包。

跨平台

  • IFW package generator 受到一些人的青睐,因为它可以生成在所有平台上都具有相似外观和感觉的安装程序。它在提供对可下载组件等功能的支持方面也相当进步。如果您有兴趣在所有平台上拥有一个易于使用的图形安装程序,那么这可能就是您正在寻找的。​​li>
  • Archive package generator 提供对 ZIP、tarball、7z 等档案的支持。这些是非常基本的格式,它们只是将您的文件集中到一个存档中。这些没有桌面集成、安装前/安装后和卸载等有用的功能,但它们作为上述之一的第二种替代包格式很方便。特别是对于那些在系统上没有管理员访问权限并希望简单地解压到方便位置的用户来说,它们非常有用。

【讨论】:

  • 对于 Windows,NSIS 比 WIX 更容易使用和更便携。因此,它通常用于零售/普通用户。由于 MSI 的高级安装、灵活性和与 Windows 软件服务的集成,WIX 对企业软件的需求越来越大,甚至被强制要求。
猜你喜欢
  • 2015-04-24
  • 1970-01-01
  • 2022-07-12
  • 2017-08-03
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多