如果 configure.ac 可用,是不是应该分发“配置”脚本?
Posted
技术标签:
【中文标题】如果 configure.ac 可用,是不是应该分发“配置”脚本?【英文标题】:Should a "configure" script be distributed if configure.ac is available?如果 configure.ac 可用,是否应该分发“配置”脚本? 【发布时间】:2012-02-10 12:19:42 【问题描述】:目前,我们的安装说明是:
autoreconf -fi
./configure
...
autoreconf
步骤从configure.ac
生成configure
文件,从Makefile.in
生成Makefile.in
。如果未安装其中一个依赖项(例如 pkg-config
),configure
和 autoreconf
都会失败,尽管后者会打印一条神秘的错误消息。
在发布源码包时,是否应该在包中提供configure
脚本?如果必须分发,还需要包含哪些其他文件?还创建了目录build-aux
和autom4te.cache
以及文件aclocal.m4
。
【问题讨论】:
在 SCM 存储库中,不应存在任何自动生成的内容(包括配置); tarball 应该包含 autoreconf -fi/autogen.sh/bootstrap 之后的状态(或者只使用make dist
)。
@jørgensen 回答这个问题,我没有完全意识到make dist
是这里的关键
我也很好奇为什么分发配置脚本很好。对我来说,运行autogen.sh
似乎同样容易(而且更干净)。
@LeifGruenwoldt autogen.sh(通常称为autoreconf -fi
)需要存在依赖项。如果它们丢失,您可能会收到隐秘的错误。另一个原因是configure
脚本的生成需要autoconf(通常也是automake),一旦你有了configure
脚本,就不再需要了。
@Lekensteyn 谢谢。我想我希望如果有人安装了编译项目的工具,他们也可以只安装 autotools,但也许并不是每个人都可以使用。啊,现代发行版的便利。
【参考方案1】:
在 SCM 存储库中,不应存在任何自动生成的内容(包括配置——但开发人员的意见在这里偏离了主题)。 tarball 应该包含autoreconf -fi
和/或autogen.sh
(或您为其选择的任何名称)之后的状态。第三,您也可以使用make dist
,尽管它要求所有应出现在 tarball 中的文件也必须在 Makefile 中列出。
【讨论】:
你错了,最终用户不需要安装自动工具来构建你的软件。 @MoDJ 请注意:使用此解决方案,最终用户无需安装自动工具(但开发人员需要)。【参考方案2】:您的安装说明严重损坏。用户不需要安装自动工具链来构建您的软件。您必须在 tarball 中分发配置脚本。请注意,您不应在版本控制系统中包含配置脚本。 (您不应该将您的版本控制系统用作分发系统。)
【讨论】:
感谢您的回复,我现在知道应该使用make dist
(它非常适合生成configure
文件等)。
@Lekensteyn -- 实际上,您应该始终使用make distcheck
很高兴知道,autotools 有很多选择,但您只需要了解它,因为文档并不简洁。 gnu.org/software/automake/manual/html_node/…【参考方案3】:
配置脚本应由维护者构建并分发在 tarball 中。最终用户永远不必触摸它,如果您使用的是 automake,最好通过AM_MAINTAINER_MODE
确保这一点。如果没有,请确保您的 Makefile.in
在为最终用户运行时不会重新生成 configure
。
如果你想知道还有什么属于那里,让automake
为你生成一个分布。辅助目录build-aux
和aclocal.m4
可以,automat4e.cache
不行。
【讨论】:
啊,我刚刚查看了 php 存储库,似乎包含来自 git 的源代码的 tarball 不应该用于分发。如果我发布一个包含configure
脚本的压缩包(就像从 PHP 下载的一样),我需要使用make dist
吗?
AM_MAINTAINER_MODE 一直是个坏主意。它的作者几年前就同意了。它现在被认为(大部分)已弃用,并且有人说要从 automake 中删除它。不要使用它。
@Lekensteyn:make dist
非常适合制作分发压缩包,毕竟这是它的工作。
@WilliamPursell:虽然关于AM_MAINTAINER_MODE
敏感性的讨论在automake 用户手册(第28.2 节)中,并且宏被称为“臭名昭著”,但它并未标记为已弃用。在至少一个用户构建由于不同的 libtool 版本和损坏的时间戳而中断后,我仍然认为这是明智的。
@thiton 是分发压缩包中的“损坏的时间戳”吗? make distcheck 应该能捕捉到这样的错误。以上是关于如果 configure.ac 可用,是不是应该分发“配置”脚本?的主要内容,如果未能解决你的问题,请参考以下文章
autoreconf:需要“configure.ac”或“configure.in”
如何使用 configure.ac 来包含 AC_INCLUDES_DEFAULT 的内容?
configure.ac中如何处理多个版本的Automake