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的结果。
问题:有没有更好的方法来实现创建不包含autotool元文件的tarball的预期目标? (这个目标是否仅仅是“可以说是不受欢迎的”或“真正的邪恶”的问题对于这个论坛来说太开放了!)
答案 0 :(得分:1)
可能有一种方法可以做到这一点,但即使存在,Automake也不会支持它。
Automake的主要目标是实现有关Makefile的GNU编码标准。并且,GNU的一个原则是,应该为用户提供黑客攻击的主要来源 - 这是GPL的要求。
传送衍生文件但不传送来源是违背这个想法的。
我认为你的理论是错误的。用户可以从中受益。例如,必须破解配置或构建脚本是相当普遍的;这对源代码来说简单得多。