20.4为什么我不做?

为什么不使用Imake代替配置脚本?

有几个人写过信来回答这个问题,所以这里包括对他们解释的改编。

以下答案基于Richard Pixley的一篇文章:

Autoconf生成的脚本经常在其拥有的机器上工作以前从未设置过处理。也就是说,它做得很好推断新系统的配置。我不能这样做。

Imake使用主机特定数据的通用数据库。对于X11,这使得这是有意义的,因为分发是由一个控制数据库的中央机构。

GNU工具不是这样发布的。每个GNU工具都有一个维护者;这些维护人员分散在世界各地。使用公共数据库将是一场维护噩梦。可能会出现Autoconf要成为这种数据库,但实际上它不是。而不是挂牌主机依赖性,它列出了程序需求。

如果您将GNU套件视为本机工具的集合,那么问题是类似的。但是GNU开发工具可以在几乎任何主机+目标排列中配置为交叉工具。所有这些配置可以同时安装。他们甚至可以配置为跨主机共享独立于主机的文件。我不知道解决这些问题。

Imake模板是一种标准化形式。GNU编码标准解决了相同的问题,但不一定强加相同的问题限制。

以下是Per Bothner的进一步解释:

Imake的优点之一是很容易生成大型使用'生成文件#包括'和宏观机制中央处理器.然而,中央处理器不可编程:它有有限的条件设施,没有循环。而且中央处理器无法检查其环境。

所有这些问题都可以通过使用第页而不是中央处理器.外壳完全可编程,具有宏替换,可以执行(或源代码)其他shell脚本,并可以检查其环境。

保罗·艾格特详细阐述了以下内容:

使用Autoconf,安装人员无需假定Imake本身已经安装并工作良好。这似乎不是什么优势习惯于我的人。但在许多主机上,Imake不是已安装或默认安装工作不正常,需要我安装一个软件包会妨碍在上接受该软件包这些主机。例如,Imake模板和配置文件可能未在主机上正确安装,或Imake生成过程可能会错误地假定所有源文件都在一个大目录中树,或Imake配置可能假设一个编译器,而包或安装程序需要使用其他包,或者可能存在包所需的Imake和Imake之间的版本不匹配受主机支持。这些问题在Autoconf中更为罕见,每个包都有自己的独立配置处理器。

此外,Imake经常会遇到以下方面的意外交互制作以及安装程序的C预处理器。根本问题这里的C预处理器是为预处理C程序而设计的,而不是生成文件。Autoconf的问题要小得多,它使用通用预处理器M4,其中包的作者(而不是安装程序)在标准方式。

最后,Mark Eichin指出:

Imake也没有那么好的扩展性。为了将新功能添加到我想,你需要提供你自己的项目模板,并复制大多数现有的功能。这意味着对于一个老练的项目,使用供应商提供的Imake模板无法提供任何杠杆——因为它们不涵盖您自己的项目所需的任何内容(除非是X11程序)。

但另一方面:

Imake的一个优势配置:Imake文件文件往往更短(同样,冗余更少)生成文件.in文件夹。至少有一个解决方案对于Kerberos V5树,我们修改了一些共同调用的内容post.in(发布于)预输入的makefile片段整棵树。这意味着许多常见的事情不一定是复制,即使它们通常位于配置设置。