c++ - 打包 Linux 软件,同时保持合理的文件结构

标签 c++ linux archlinux

所以我创建了一个软件,我想打包并发布到 Arch Linux 用户存储库,AUR,-应该注意,我以前从未为任何发行版打包过任何东西 - 我也已经打包并安装了它我自己的机器通过 Arch 的包管理器 Pacman 成功运行,但现在我想知道我到底要如何构建文件夹和文件?

通常当我写软件时,我使用这种结构:

构建/|来源/|生成文件

至少,对于这个软件,makefile 只是将 .cpp 文件从 src/编译到 build/。 为了制作 Arch 包,我还必须创建一个 .rc 文件,以将程序正确用作守护进程和 PKGBUILD 文件,该文件告诉 makepkg 程序如何构建安装程序包 - 这两个文件,但是,特定于 Arch。 如果我想为 debian 打包程序,我也需要另一组文件来执行此操作,但这些文件仅适用于 debian。现在,我不能只将 .rc 文件和 PKGBUILD 文件放入程序根文件夹,因为那样会“一团糟”,尤其是如果我也有文件来为 debian 构建一个包,但我应该把特定于发行版的文件?我需要将它放在程序根文件夹中 - 至少 - 以便能够跟踪它,我最初的想法是使用像 distro/arch/这样的结构来存储 Arch Linux 特定文件,然后是 PKGBUILD 文件只会在程序根文件夹中运行 makefile 并将编译后的文件从 build/复制到 distro/arch/然后再做任何其他事情,但我发现我无法让 PKGBUILD 以这种方式工作,Freenode 上的#archlinux 上的人也说这不是一个聪明的主意。

那么我应该把发行版的特定文件放在哪里呢?如果我知道我只需要为 Arch 提供这个程序,那么只为 Makepkg 构建它会很容易,但我不喜欢像那样限制软件,我也可以想象为其他主要发行版(如 debian)提供软件包,所以如何在保持合理的文件结构的同时实现这一点?

问候, 克里斯·布赫霍尔茨

最佳答案

您经常会在 tarball 中找到一个名为“debian”的目录,其中包含 debian 特定的文件。我会走同样的路,创建一个目录“archlinux”并将文件放在那里。

然后我会继续在 archlinux 目录中放置一个文件 README 来解释如何正确使用 PKGBUILD。

一种解决方案是在 Makefile“package-arch”中写入一条规则,将 PKGBUILD 复制到根目录,运行 makepkg,然后删除多余的 PKGBUILD。

它很老套,所以我也会为 Arch 人员写一个错误报告来修复这个限制。但是,您是否尝试过 makepkg -p archlinux/PKGBUILD

关于c++ - 打包 Linux 软件,同时保持合理的文件结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4498159/

相关文章:

c++ - C++ typedef 中的 struct 关键字

linux - 无需重启系统即可设置Linux代理

linux - POSIX 消息队列通过内核空间?

qt - CUDA 10 不支持高于 7 的 Gcc 版本 - Arch Linux 中的 Qt 错误

archlinux - pgadmin4 显示 500(内部服务器错误)

c++ - 是否有用于 Windows 资源加载字符串的有用 C++ 包装器类?

c# - 函数的 IDL 声明(在 C++ 中)将从 C# 获取 C 样式数组

c# - Arch linux 启动应用程序(脚本)Raspberry Pi

c++ - 从不遵循计算机字节对齐的 HDD 读取文件时出现性能问题

linux - 在 awk 中使用 if block