Debian 我多久运行一次autoconf?

Debian 我多久运行一次autoconf?,debian,autotools,autoconf,cdbs,Debian,Autotools,Autoconf,Cdbs,在我的公司里,我目前正在用第三方库创建一个Debiandeb包。该库是使用自动工具构建的。我以前从来没有使用过自动工具,现在我有点困难。库源包含configure.in和Makefile.am文件和m4/目录。我能够使用以下顺序构建库: aclocal -I m4 -I /usr/share/aclocal autoheader libtoolize --automake automake -a autoconf ./configure make 在debian/rules文件中,我想使用CD

在我的公司里,我目前正在用第三方库创建一个Debian
deb
包。该库是使用自动工具构建的。我以前从来没有使用过自动工具,现在我有点困难。库源包含
configure.in
Makefile.am
文件和
m4/
目录。我能够使用以下顺序构建库:

aclocal -I m4 -I /usr/share/aclocal
autoheader
libtoolize --automake
automake -a
autoconf
./configure
make
debian/rules
文件中,我想使用CDB。我写道:

#!/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 CDB类的作者似乎假设了这样的事情——他们假设
配置
存在,并在为不同的体系结构编译包时重用它。我说得对吗

一方面,如果可以生成
configure
,那么它不应该出现在任何地方-如果需要,可以从其他文件生成。另一方面,Autotools CDBS类的作者一定有这样实现它的原因,而不是其他原因

总结:

  • 如何处理上述自动工具CDB类问题
  • 我多久重新生成一次
    配置
    ?(一般情况下,以及在构建Debian软件包时。)
    • Jasiu

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

      通常,只有在对configure.ac、Makefile.am、m4宏等进行更改时,才能运行自动工具


      顺便说一句,如果autoconf足够新,您可以调用autoeconf生成configure。但是,如果原始配置没有问题,就让它保持原样。

      您通常应该从发行版构建debian软件包,这样您就知道要打包什么了——通常是tarball package-VERSION.tar.gz。在这种情况下,通常不需要运行自动工具,除非配置{sub,guess}太旧,无法在目标系统上运行

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

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

      这并不能解释失败的原因。问题顶部的顺序包括运行
      /configure
      ,这样它就不会丢失


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

      首先,您工作太辛苦了。而不是运行aclocal&&autoheader&&etc。。。,
      您只需运行autoreconf。这将确保以正确的顺序调用所有自动工具(而且手指和大脑更容易使用)。其次,一旦生成了配置脚本,就应该创建一个构建目录并运行“makedist”以获得一个tarball,该tarball将用于生成deb。tarball将包含configure脚本。(更好的是,只需使用upstream生成的tarball,根本不用担心运行autotools。)

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

      makebuilddir/您的包名称::
      自动恢复--安装

      此规则基本上运行autoreconf--install命令(如果存在configure.ac和Makefile.am文件,则会为您生成配置脚本)作为包的预配置操作。目标规则记录在此处:


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

      但是如果可以从
      configure.ac
      Makefile.am
      生成
      configure
      ,我们不应该总是分发后两个吗?将
      configure
      分发给我就像将二进制文件放入存储库。GNU构建系统需要
      /configure&&make&&makeinstall
      在提取tarball后立即工作,因此“configure”脚本应该分发到tarball中。它不是我们喜欢分发的唯一一种生成的文件:Makefile.in、Bison生成的解析器、Texinfo文档都是从其他文件生成的,并且是分发的,这样最终用户就不需要安装工具来重新生成它们。存储库中的内容与用户tarball中的内容不同。开发人员通常会忽略生成的文件,但他们的工作是运行所有文件并重新生成它们。CDB希望
      configure
      脚本已经存在。我们得到的源代码只包含
      configure.ac
      Makefile.am
      。我把这两个放在我们的SVN回购中,但我不想把
      configure
      放在那里,因为它可以从