我想在Linux,OSX和Windows上分发C/C++项目的可执行文件和库。什么是首选的CPack生成器,即哪些可能对大多数用户可用?在Windows上,似乎只有NSIS,但在Linux和OSX上有几种选择。 顺便说一下,也会生成一个源代码分发,所以理论上所有平台的用户都应该能够自己编译代码,但是为了方便,我们希望提供预编译的二进制文件。CMake/CPack:不同平台的首选包生成器
回答
在每个不同的平台上有多种常见的做法。哪一个最适合你将取决于各种因素,但以下至少应该有助于选择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等档案的支持。这些都是非常基本的格式,只需将文件合并到一个归档中即可。这些功能没有桌面集成,安装前/安装后和卸载等有用功能,但作为上述其中一种替代软件包格式,它们非常方便。特别是,对于那些在系统中没有管理员权限的用户而言,他们可能非常有用,并且只需将其解压到一个方便的位置即可。
对于Windows,NSIS比WIX更易于使用并且更便于携带。所以它通常用于零售/普通用户。由于MSI的高级安装,灵活性以及与Windows软件服务的集成,WIX越来越受到需求,甚至是企业软件的强制要求。 – utopia
- 1. 通过平台生成器
- 2. 平台生成器和C#
- 3. 平台生成器的WinCE 7.0
- 4. 跨平台桌面GUI的首选开发平台?
- 5. 平台生成器Project.Dat问题
- 6. 平台生成器命令行构建
- 7. 多平台代码生成
- 8. 不同平台上的Javascript
- 9. Dagger2不生成匕首*类
- 10. .tlh在2台机器上生成是不同的
- 11. protoc生成属于不同的包
- 12. ColdFusion在两台不同服务器上生成的不同存根
- 13. 跨平台配置,选项,设置,首选项,默认值
- 14. 如何使用Windows7的上平台生成器5.0(86)
- 15. 是否有免费的跨平台设置生成器工具?
- 16. 界面生成器/跨平台中的自定义UIView
- 17. Windows CE平台生成器6上的.NET 3.5 CF我
- 18. Flutter - Android原生平台集成
- 19. R.id在Android平台上如何生成?
- 20. 函数在Haskell平台中生成2011.2.0.1
- 21. WEC 7.0平台生成器操作系统设计生成错误
- 22. 在Haskell平台中执行区域设置的首选方式
- 23. Yii2控制台代码生成器不生成查询模型
- 24. 为什么gmp_mod在不同的平台上产生不同的结果?
- 25. SCrypt在x64平台上产生不同的结果
- 26. 如何在VS2008中启用平台生成器模式
- 27. 如何:为Windows CE 6.0平台生成器
- 28. CMake:为其他平台使用生成器。怎么样?
- 29. 使用#include指令在平台生成器DAT文件
- 30. EDX平台的定位不会生效
所以问题是,尽管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一样的想法。 –