3

在我的公司,我目前正在deb从第三方库中创建一个 Debian 软件包。该库是使用 Autotools 构建的。我以前从未使用过 Autotools,我遇到了一些困难。库源包含文件和configure.in目录。我可以使用以下顺序构建库:Makefile.amm4/

aclocal -I m4 -I /usr/share/aclocal
autoheader
libtoolize --automake
automake -a
autoconf
./configure
make

debian/rules文件中我想使用 CDBS。我写了这个:

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk

但它不起作用。它抱怨configure文件丢失。没错,因为 Autotools 类希望这个文件存在。但它不在那里,有人必须先打电话autoconf和朋友!

为什么 Autotools CDBS 类不让我autoconf和朋友打电话?我该如何规避它?

题外话:

当我使用一个程序时,我不会每次都编译它,我编译一次并重用二进制文件。

当人们安装软件时,他们不会自己编译,维护者编译一次,人们会重复使用二进制包。

维护者在编译包时,不会configure每次编译都创建脚本,上游作者创建一次,维护者可以复用。

最后一句是真的吗?因为在我看来,Autotools CDBS 类的作者似乎假设了这样的事情——他们假设configure存在,并在为不同的架构编译包时重用它。我对吗?

一方面,如果configure可以生成,它不应该出现在任何地方——如果你需要它,你可以从其他文件生成。另一方面,Autotools CDBS 类的作者一定有一些理由以这种方式实现它,而不是另一种方式。

概括:

  • 如何处理上述 Autotools CDBS 类问题?
  • 我多久再生一次configure?(在一般情况下以及在构建 Debian 软件包时。)
4

4 回答 4

6

First, you're working too hard. Rather than running aclocal && autoheader && etc..., you can just run autoreconf. This will ensure that all the autotools are invoked in the correct order (and is easier on the fingers and the brain). Second, once you've generated the configure script, you should make a build directory and run 'make dist' to get a tarball that will be used to generate the deb. The tarball will have the configure script in it. (Better yet, just use the tarball generated by upstream and don't worry about running the autotools at all.)

于 2009-07-18T20:45:14.673 回答
1

雅修,

确实,配置脚本是由上游作者创建的,通常不需要由其他任何人重新生成。但有时,当原始配置出现问题时,可能需要运行 autotools(使用较新版本的 autotools 或使用更新的 m4 宏)。

通常只有在对 configure.ac、Makefile.am、m4 宏等进行更改时才运行 autotools。

顺便说一句,如果 autoconf 足够新,您可以调用 autoreconf 来生成配置。但如果原来的配置没有问题,就保持原样。

于 2009-06-25T13:24:22.060 回答
0

为了回答“为什么 Autotools CDBS 类不让我调用 autoconf 和朋友?我该如何规避它?”的原始问题,我所做的是将以下规则添加到 debian/rules 文件中:

makebuilddir/your_package_name::
autoreconf --install

该规则基本上运行 autoreconf --install 命令(如果存在 configure.ac 和 Makefile.am 文件,它将为您生成配置脚本)作为包的预配置操作。目标规则记录在这里:http ://cdbs-doc.duckcorp.org/en/cdbs-doc.xhtml#id489203

就像 adl 所说的,开发人员应该能够运行 autoreconf 来为他们的开发重新生成配置脚本,因此只有 configure.ac 和 Makefile.am 文件应该被检入 SVN。但是,当源发布给最终用户时,应该提供配置脚本,以便最终用户可以运行配置脚本,而无需工具来生成它。

于 2009-08-24T18:23:28.620 回答
-1

您通常应该从发行版构建 debian 包,以便知道要打包的内容 - 通常是 tarball package-VERSION.tar.gz。在这种情况下,通常不需要运行 autotools,除非 config.{sub,guess} 太旧并且无法在目标系统上运行。

不管怎样,你问了很多问题,但第一个问题是基于问题的:

“但它不起作用。它抱怨配置文件丢失。”

这并不能解释失败的原因。您在问题顶部的序列包括运行./configure,因此不能丢失。

configure当自动工具正确运行时始终存在,因此您以后的大多数问题都相当混乱。

于 2009-06-28T04:52:29.137 回答