CMake / CPack:不同平台的首选包生成器

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

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

视窗:

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

苹果电脑

Mac有多种选择,但哪一种最合适取决于你想要打包的内容。 如果您只想提供一个应用程序包,则DMG包生成器 (有时也称为DragNDrop生成器)可能就是您想要的。 用户很熟悉这些,他们很容易使用。 避免捆绑发电机 ,它是支持它的年龄较大和更受限制,DMG发电机应该是首选。

对于包含多个单一包的软件包,DMG生成器仍然可能适用,但适当的安装程序可能更合适。 直到最近几年, PackageMaker发生器才成为这个产品的发展方向,但是它已经被ProductBuild生成器所取代(从3.7版开始支持CMake)。

Linux的

在基于RedHat的系统上,RPM通常是选择的软件包格式(使用RPM生成器 ),而对于基于Debian的系统,DEB格式是首选(使用DEB生成器 )。 基于Debian的系统可以使用像外星人这样的工具来支持RPM,但是用户几乎总是更喜欢本地的DEB格式。 如果你很乐意提供这两种方法,你可以保持两个阵营愉快,但请注意,你将不得不小心注意二进制兼容性。 简单的软件包曾经能够针对LSB(Linux标准库)进行构建,以生成适用于所有主要Linux发行版(甚至基于Debian的版本)的单个RPM,但是LSB并没有真正跟上最新的发展,它从来没有真正支持最复杂的应用程序需要的全套功能(或他们提供的软件包的版本太旧)。 然而,LSB提供了非常有用的工具,比如应用程序检查器,用于评估您构建的包(无论如何)是否会丢失各种Linux发行版中的符号等。

请注意,对于Linux,您应该区分是将打包包装在Linux发行版中,还是希望用户在发行版的打包系统之外下载和安装软件包。 较大的独立商业软件产品将倾向于作为独立软件包(包括相关库等)进行分发,并且默认安装在/opt下(如果它们遵循LSB和文件系统层次结构标准–FHS (PDF)所倡导的那样)。 理想情况下,您可以使您的软件包可以重新定位,这样分发维护人员可以更轻松地调整您的打包方法以适应其分发需求。

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

跨平台

  • IFW封装发生器被某些人视为产生在所有平台上具有类似外观和感觉的安装者的方式。 在提供对可下载组件等功能的支持方面也是相当进步的。 如果在所有平台上都有一个易于使用的图形安装程序,那么这个可能就是你正在寻找的东西。
  • 档案包生成器提供对ZIP,tarball,7z等档案的支持。 这些都是非常基本的格式,只需将文件合并到一个归档中即可。 这些功能没有桌面集成,安装前/安装后和卸载等有用的功能,但作为上述之一的第二种替代软件包格式,它们非常方便。 特别是,对于那些在系统中没有管理员权限的用户,只要将其解压到一个方便的位置就可以了。