在我的公司,我目前正致力于从第三方库中创建Debian deb
软件包。该库是使用Autotools构建的。我之前从未使用过Autotools,而且我遇到了一些困难。库源包含configure.in
和Makefile.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类的作者必须有一些理由以这种方式实现它而不是另一种。
要点:
configure
? (一般来说,在构建Debian软件包时。)答案 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
,因此不能错过。
configure
始终存在,因此您以后的大部分问题都相当混乱。