2017-09-02 75 views
2

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

+0

所以问题是,尽管Windows用户习惯了它,但在Linux上,您通常会避免将所有库与可执行文件打包在一起。因此,拥有Windows风格的安装程序在Linux世界中并不常见。你只需将你的软件打包成发布软件包*,以便你可以(Debian风格)'apt-get install matts_amazing_software'或(Fedora风格)'dnf install matts_a ...'或( Gentoo风格)'emerge matts_a ...'。想想那些软件包,比如Windows上的.msi安装程序,只是它们被链接到发行版已经带来的库上...... –

+0

......这样你就不会像在Windows上那样拥有四百万个不同的'libdepency.dll'。所以,对于普通的linux用户来说,安装软件是集中的,而且你从来不会手动下载二进制安装程序。缺点是每个发行版都需要不同的包,因为每个发行版都有不同的库集。如果你真的希望看到* flatpack *,但我个人不喜欢让Linux软件生态系统被分区,不兼容和打破Windows一样的想法。 –

回答

3

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

的Windows:

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

的Mac

有多种选择,从为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等档案的支持。这些都是非常基本的格式,只需将文件合并到一个归档中即可。这些功能没有桌面集成,安装前/安装后和卸载等有用功能,但作为上述其中一种替代软件包格式,它们非常方便。特别是,对于那些在系统中没有管理员权限的用户而言,他们可能非常有用,并且只需将其解压到一个方便的位置即可。
+1

对于Windows,NSIS比WIX更易于使用并且更便于携带。所以它通常用于零售/普通用户。由于MSI的高级安装,灵活性以及与Windows软件服务的集成,WIX越来越受到需求,甚至是企业软件的强制要求。 – utopia