我正在开发两个 Ubuntu 包,其中一个依赖于另一个。
说,foo
这取决于libfoo
。
我将foo
和的版本一起递增。版本libfoo
始终依赖于版本。foo
1.2.1
libfoo
1.2.1
libfoo
构建和的标准 Debian 流程是什么foo
?
我是否必须libfoo
先构建和安装,然后才进行编译foo
?
我能否pbuilder
以某种方式了解foo
需求libfoo
并libfoo
在编译之前进行安装foo
?
这种情况的最佳做法是什么
答案1
编辑问题中的额外信息:
建设本机执行您想要的操作 - 只需为其提供适当的差分扫描文件。查看依赖项中包含版本的真实示例,例如nmap
apt-get source nmap; cat nmap_*.dsc
并查看该Build-Depends
条款:
...
Build-Depends: debhelper (>= 9), libgtk2.0-dev, dh-autoreconf, flex, bison, libssl-dev, libpcap0.8-dev, libpcre3-dev, binutils-dev, liblinear-dev, python (>= 2.3.5-7), python-all-dev, liblua5.2-dev
...
在你的情况下你需要类似
Build-Depends: libfoo (=1.2.1), flex, bison, ...
原始帖子:
因此,让我们总结一下评论......
您需要的是规则文件中的两个条款debian/control
:
- 构建依赖- 源包构建所需的其他包的依赖关系
- 依靠- 安装包依赖其他包
我强烈建议你阅读全文Ubuntu 打包指南.您的问题已在2.2. 控制文件。还可阅读 Debian 团队在以下网址撰写的相同信息Debian 新维护者指南, 更确切地说第 5 章 - 控制文件及其字段。如果您要在公司中维护 deb 软件包(或者有一天不在 Debian 或 Ubuntu 中维护 :)),那么花时间阅读手册将为您节省很多麻烦。
答案2
如果这些包有单独的源档案。我的意思是它们是不同的项目。那么Rostislav Kandilarov 的回答是正确的。
否则,如果它们在同一个源文件中。那么不用担心,只要你的源代码能够使用
make
(cmake
或你使用的任何工具)顺利编译和安装即可。打包操作在编译完所有源代码后进行。
调用...等后快速概览进程debuild
(确切的进程可能会在./debian/rules
文件内覆盖)
- 清理树木
- 编译它
- 将其安装到临时文件夹
./debian/tmp/
将文件分成
./debian/tmp/foo/
&./debian/tmp/libfoo/
文件夹。要构建的二进制包应在
./debian/control
文件中声明:Source: foo ... Package: foo ... Depends: libfoo (=${binary:Version}), .. ... Package: libfoo ...
foo.install
并且每个包中应该分别包含文件libfoo.install
。使用新生成的控制文件将文件压缩到 Debian 档案中。
让我来回答你的问题:
构建 libfoo 和 foo 的标准 Debian 流程是什么?
:/ 我不推荐那些冗长的入门手册,但对我来说,作为参考,最好的是寻找真实的例子:
http://packages.ubuntu.com/source/xenial/vlc
你看到有多少二进制包是在同一源上构建的吗?查看底部并下载
*.debian.tar.xz
包含用于打包 VLC 的所有文件的存档。我是否必须先构建并安装 libfoo,然后再编译 foo?
不,不需要。
我可以让 pbuilder 以某种方式了解 foo 需要 libfoo,并在编译 foo 之前安装 libfoo 吗?
不。不需要,
Build-Depends:
因为它已经在源代码树中可用。但它需要包含在二进制文件Depends:
中foo
。