【问题标题】:why don't automake and autotools lose power of GNU Make?为什么 automake 和 autotools 不会失去 GNU Make 的能力?
【发布时间】:2014-04-19 07:49:07
【问题描述】:

我对 GNU Make 非常有经验,但对自动工具完全陌生。通过查看一些教程,我了解到 autotools 是一种标准化 makefile 目标和跨多个架构构建的方法。这是一件好事,因此开源发行版的用户始终可以以相同的方式构建和安装它们。

GNU Make 非常强大和灵活:任何 shell 命令都可以用来构建目标,并且目标对先决条件的依赖关系可以通过许多有效和灵活的方式来表达。

可以通过将Makefile 转换为Makefile.am 来将Makefile 的所有功能转移到基于automake 的系统上吗?我在教程中发现了以下语句:

类似的规则

%.foo: %.bar

不可移植,不能在 Makefile.am 中使用。因此,程序员必须在模式规则足够的情况下编写显式规则,这肯定更耗时且不易维护。

另外,在我见过的 Makefile.am 文件示例中,我从未见过任何复杂的变量计算或函数。

那么,如果 automake 限制了 GNU Make 结构,它如何能够以与 GNU Make 相同的效率、编程速度和可维护性构建相同的软件呢?

我认为它可以,我只是没有看到明显的东西。

【问题讨论】:

    标签: automake


    【解决方案1】:

    我不是很精通,也不是自动工具的忠实粉丝,但我的理解是:

    自动工具的目的是提高可移植性,例如对于没有 GNU Make 可用的系统。示例包括 HP-UX、Solaris、IRIX 和 BSD 系列。 autotools 用户可以使用始终不变的指令序列构建程序:

    ./configure
    make
    

    这里,./configure 是一个/bin/sh 脚本,它是在开发者的系统上生成的,并且是可移植的,因此它可以在各种系统上运行。生成的Makefile 是特定于平台的,包括对特定于平台的要求/问题的处理。此外,./configure 生成一个 config.h 文件,该文件允许 C 代码对某些库的可用性/不存在做出反应,以构建传递给 ./configure 的选项。

    GNU build system 上的 Wikipedia 页面包含了整个过程中涉及的文件的精美图表:

    configureMakefile.in 之前的所有内容都在开发者系统上预先生成,config.status 及以下的所有内容都在构建(用户)系统上生成。

    今天的自动工具有什么意义?显然,它们仍在许多项目中使用。然而,非 Linux UNIX 操作系统的重要性已经大大下降。那些仍然存在的都有 GNU Make。正如您所说,GNU Make 具有数量惊人的功能,并且可以很容易地编写 Makefiles 来自动跟踪依赖关系并处理可用/缺失的库。

    因此,我个人基于 GNU Make 编写了我所有的 make 系统,我很高兴多年来我不必接触自动工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2016-12-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      相关资源
      最近更新 更多