【问题标题】:why is "autoreconf" not used often?为什么不经常使用“autoreconf”?
【发布时间】:2013-10-09 05:34:03
【问题描述】:

我是 Autotools 的新手。据我了解,使用 Autotools 构建软件的基本步骤如下:

  1. autoreconf --install
  2. ./configure
  3. make

但是,我注意到大多数开源软件包(在 Linux 上)不需要第 1 步。他们大多数时候只需要第 2 步和第 3 步来构建。似乎它们已经与Makefile.in 打包在一起。我想知道为什么?他们是手动编码Makefile.in,还是软件开发人员在创建软件包之前使用autoreconf 生成Makefile.in

谢谢。

【问题讨论】:

  • 好的。我想我自己得到了一个可能的答案:不需要用户运行“autoreconf”,软件包对最终用户系统的要求较低。 IE。最终用户无需安装 Autotools。我认为这实际上是一个很大的理由。
  • 没错;当configure 运行时,用户只需要几个脚本解释器(Bourne shell、sed,也许还有 perl),以及编译器工具链。即使缺少所有库依赖项,configure 脚本也应该能够运行并诊断问题或解决问题。当您运行make dist-gzip 时,您会得到一个包含configure 脚本的tarball,以及打包的所有*.in 模板文件,因此用户不必执行需要自动工具的前面步骤。

标签: linux autotools autoreconf


【解决方案1】:

创建 tarball(或从版本控制系统检查源代码)的软件开发人员通常会从名为 bootstrap.shautogen.sh 的脚本中调用 autoreconf,这可能会做其他事情。 autoreconf 也可能被Makefile 调用(例如当configure.ac 发生变化时)。

大多数用户从不需要运行autoreconf,即使是那些对源代码进行一些修改(例如补丁)的用户。只有那些需要对包本身进行修改(对configure.ac 和/或Makefile.am 进行更改)的人才需要autoreconf

【讨论】:

    【解决方案2】:

    运行autoreconf 需要已安装正确版本的自动工具。这导致了先有鸡还是先有蛋的问题——首先如何安装自动工具?它还添加了大多数最终用户并不真正需要的额外依赖项。

    因此,大多数 打包程序会在生成他们分发的源 tarball 之前运行 autoreconf。这意味着如果您下载这样的 tarball,您可以配置和构建它,而无需先安装 autotools。

    【讨论】:

    • 如果您想从源代码引导您的系统而不使用预先生成的configure 脚本,那么不使用 autotools/configure 直接安装 autotools 并非不可能(autoconf 只是一个 shell 脚本,您只需要替换一些可以使用sed 完成的占位符变量)。一旦你有了一个版本的 autotools,引导其他版本就容易一些。
    猜你喜欢
    • 2014-09-25
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2020-08-04
    • 2017-07-02
    相关资源
    最近更新 更多