我多久运行一次autoconf?

时间:2009-06-25 12:33:37

标签: debian autotools autoconf cdbs

在我的公司,我目前正致力于从第三方库中创建Debian deb软件包。该库是使用Autotools构建的。我之前从未使用过Autotools,而且我遇到了一些困难。库源包含configure.inMakefile.am个文件以及m4/目录。我能够使用以下序列构建库:

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 个答案:

答案 0 :(得分:6)

首先,你工作太辛苦了。而不是运行aclocal&& amp; autoheader&&等等..., 你可以运行autoreconf。这将确保以正确的顺序调用所有自动工具(并且在手指和大脑上更容易)。其次,一旦你生成了配置脚本,你应该创建一个构建目录并运行'make dist'来获得将用于生成deb的tarball。 tarball将包含configure脚本。 (更好的是,只使用上游生成的tarball,不要担心运行autotools。)

答案 1 :(得分:1)

Jasiu,

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

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

BTW如果autoconf足够新,你可以调用autoreconf来生成configure。但是如果原始配置没有问题,请保持原样。

答案 2 :(得分: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脚本,因此只应将configure.ac和Makefile.am文件检入SVN。但是,当源发布给最终用户时,应该提供配置脚本,以便最终用户可以运行配置脚本,而无需使用工具来生成它。

答案 3 :(得分:-1)

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

无论如何,你提出了很多问题,但第一个问题是基于这个问题:

  

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

没有解释失败的原因。问题顶部的序列包括运行./configure,因此不能错过。

当autotools正确运行时,

configure始终存在,因此您以后的大部分问题都相当混乱。