3

AM_MAINTAINER_MODE一直受到批评,我认为主要的反对意见是,如果未检测到对元文件的依赖关系,它会导致不正确的构建。此外,经常有人认为生成的文件不属于版本控制系统(我同意这个立场)。我目前认为如果configure不属于 vcs,那么configure.ac也不Makefile.am属于 tarball。为此,我编写了一个简单的脚本来清除 Makefile.in 中的某些目标,并将以下目标添加到顶级 Makefile.am:

dist-hook:
    @rm $(distdir)/configure.ac
    @rm $(distdir)/aclocal.m4
    @find $(distdir) -name Makefile.am -exec rm {} \;
    @find $(distdir) -name Makefile.in -exec $(top_srcdir)/clean-Makefile {} \;

该解决方案回避了AM_MAINTAINER_MODE由于没有要修改的元文件而产生的问题。

令我震惊的是,autoconf 的最大失败之一是错误地认为使用它构建的每个项目都依赖于 autoconf(这不是 autoconf 失败,而是营销/教育的失败),而这种误解主要是由于包含元文件的压缩包。

问题:有没有更好的方法来实现创建不包含自动工具元文件的 tarball 的预期目标?(对于这个论坛来说,这个目标仅仅是“可以说是不受欢迎的”还是“真正的邪恶”的问题太开放了!)

4

1 回答 1

1

可能有办法做到这一点,但即使有,Automake 也不支持。

Automake 的主要目标是实现有关 Makefile 的 GNU 编码标准。并且,GNU 的一个原则是用户应该被给予主要的来源来破解——这是 GPL 的要求。

运送派生文件而不是源文件是违反这个想法的。

我认为你在这里的理论是错误的。用户受益于拥有源代码。例如,不得不破解配置或构建脚本是相当普遍的;这对于源代码来说要简单得多。

于 2013-11-05T02:21:14.860 回答