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

时间:2017-09-02 07:16:27

标签: linux windows macos cmake cpack

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

1 个答案:

答案 0 :(得分:5)

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

<强>窗:

  • 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被一些人青睐,作为一种生产在所有平台上具有相似外观和感觉的安装程序的方法。在为可下载组件等功能提供支持方面也非常先进。如果有兴趣在所有平台上使用易于使用的图形安装程序,那么这可能是您正在寻找的。
  • Archive package generator为ZIP,tarball,7z等档案提供支持。这些是非常基本的格式,只是将文件整合到一个存档中。它们没有桌面集成,安装前/安装后的有用功能,但它们作为上述其中一种的第二种替代包格式非常方便。特别是,它们对于在系统上没有管理员权限并希望简单地解压缩到方便位置的用户非常有用。