C++ 打包Linux软件,同时保持文件结构正常

C++ 打包Linux软件,同时保持文件结构正常,c++,linux,archlinux,C++,Linux,Archlinux,所以我创建了一个软件,我想打包并发布到Arch Linux用户存储库AUR,-应该注意,我以前从未为任何发行版打包过任何东西-我还通过Arch的package manager Pacman成功地将其打包并安装到我自己的机器上,但现在我想知道我到底该如何构建文件夹和文件 通常,当我编写软件时,我使用以下结构: build/| src/| makefile 对于这一软件,makefile至少只从src/编译一个.cpp文件到build/。 为了制作Arch包,我还必须创建一个.rc文件,将程序正确地

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

通常,当我编写软件时,我使用以下结构:

build/| src/| makefile

对于这一软件,makefile至少只从src/编译一个.cpp文件到build/。 为了制作Arch包,我还必须创建一个.rc文件,将程序正确地用作守护进程,并创建一个PKGBUILD文件,该文件告诉makepkg程序如何构建安装程序包——不过,这两个文件是Arch特有的。 如果我想为debian打包程序,我也需要另一组文件来完成,但是这些文件只对debian有效。现在,我不能只把.rc文件和PKGBUILD文件放在programs根文件夹中,因为那会“一团糟”,特别是如果我还有文件为debian构建包,那么我应该把特定于发行版的文件放在哪里呢?我需要把它放在programs根文件夹中——至少——以便能够跟踪它,我最初的想法是使用类似于distro/arch/for arch Linux特定文件的结构,然后PKGBUILD文件只需运行programs root文件夹中的makefile,然后将编译后的文件从build/复制到distro/arch/就可以了,但我发现我无法让PKGBUILD以这种方式工作,Freenode上的#archlinux上的人也说这不是一个明智的想法

那么,我应该将特定于发行版的文件放在哪里呢?如果我知道我只需要为Arch提供这个程序,那么只为Makepkg构建它就很容易了,但我不喜欢把这样的软件囚禁起来,我还可以想象为其他mayor发行版(如debian)提供软件包,那么我如何在保持正常文件结构的同时实现这一点呢

问候,,
Chris Buchholz

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

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

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


这是黑客行为,所以我也会为Arch人员编写一份bug报告来修复这个限制。但是,您是否尝试过
makepkg-parchlinux/PKGBUILD

非常感谢您的回答,ypnos。我发现如何组织这个项目非常鼓舞人心。我决定不将makefile与发行版细节混合使用,makepkg-p命令也不起作用。但是我发现我可以告诉PKGBUILD文件在它开始依赖src/并构建东西之前,从src/中绘制源文件并将它们复制到archlinux/中,这非常有效。