【问题标题】:How do you package GCC for distribution?你如何打包 GCC 进行分发?
【发布时间】:2020-07-25 17:52:54
【问题描述】:

我正在制作一个经过修改的 C++ 编译器,并在本地构建和测试它。不过,我希望能够为 Windows、Linux (Debian) 和 Mac OSX 打包我的构建。

我可以在网上找到所有关于构建 gcc 的说明,但不考虑使某些东西可分发(或者我可能遗漏了什么?)。我知道对于 Windows,我需要以某种方式捆绑 MinGW,但这只会让我更加困惑——而且我不知道这些天 Mac 与 GCC 的工作情况如何......

任何人都可以安排一组离散的高级步骤,我可以在每个系统上尝试,这样我就可以让人们轻松安装我修改后的编译器?

【问题讨论】:

  • 您可以构建一个 docker 镜像来共享修改后的编译器,这里有一个为 GCC devblogs.microsoft.com/cppblog/… 构建镜像的教程。您可以从那里进行修改。
  • 这可能高度依赖于平台。
  • 也就是说,如果您使用的是 Linux,并且想使用 RPM,here's how to create one

标签: c++ gcc mingw


【解决方案1】:

首先确保您的项目安装良好,包括可执行文件、标头、运行时依赖项。如果您使用的是 cmake 之类的东西,则需要将东西安装到 CMAKE_INSTALL_PREFIX,同时可能附加 GnuInstallDirs。如果您使用的是make,那么您需要确保make install --prefix=... 运行良好。

从这里,您可以独立定位每个平台。独立于您的项目处理包装。就像 Chipster 提到的,制作rpm 文件并不难。 deb 用于基于 Debian 的操作系统的文件,tar.xz 用于基于 Arch 的操作系统的文件是相似的。创建这些包的规则可以使用你的install 规则来创建包。你提到了mingw。如果您的目标是 mingw 的 msys 分发版,用于 Windows 部署,那么基于 Arch 的 pacman 打包也可以在 msys 上运行。您可以一次慢慢地支持一个平台,而对您的实际项目几乎没有任何更改。

通常在开源世界中,人们会发布一个支持./configure && make && make install 或类似文件的tar.gz 文件。然后与平台相关的人(如 Debian 开发人员)会找到您的项目,为其制定一些打包规则,并将其发布到他们的发行版中。这意味着您的项目可以完全不知道它的发布位置。这也意味着您现在还不需要担心 MacOS,您可以等到有人需要它,或者在某些硬件上对其进行测试。

如果您真的想从项目内部控制每个平台的打包方式,并且您已经在使用cmakecpack 是一个非常有用的工具。为您的项目编写cpack 规则后,您只需键入cpack 即可生成many types 的可部署档案。您不会将生成的 *.deb 文件放入 Debian 或 Ubuntu 官方存档中,但至少人们可以使用这些格式安装您的软件包。

另外,考虑发布一个包含运行时库的包,以及一个包含开发内容(头文件、编译器、静态库)的包。这样,如果有人使用您的编译器,他们可以重新分发运行时库,这可能会更简单的安装。

【讨论】:

    猜你喜欢
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多