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

mat*_*ten 5 linux windows macos cmake cpack

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

Cra*_*ott 8

每个不同平台都有多种常见做法.哪一个最适合您将取决于多种因素,但以下内容至少应该有助于选择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,压缩包,7Z和更多的压缩文件的支持.这些是非常基本的格式,只是将文件整合到一个存档中.它们没有桌面集成,安装前/安装后的有用功能,但它们作为上述其中一种的第二种替代包格式非常方便.特别是,它们对于在其系统上没有管理员权限并希望简单地解压缩到方便位置的用户非常有用.

  • 对于 Windows,NSIS 比 WIX 更易于使用且更便携。因此,它通常用于零售/普通用户。由于 MSI 的高级安装、灵活性以及与 Windows 软件服务的集成,WIX 的需求日益增长,甚至成为企业软件的强制要求。 (2认同)