【问题标题】: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),configureautoreconf 都会失败,尽管后者会打印一条神秘的错误消息。

在发布源码包时,是否应该在包中提供configure 脚本?如果必须分发,还需要包含哪些其他文件?还创建了目录build-auxautom4te.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,但也许并不是每个人都可以使用。啊,现代发行版的便利。

标签: autoconf


【解决方案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-auxaclocal.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 应该能捕捉到这样的错误。
猜你喜欢
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 2022-12-21
  • 1970-01-01
  • 2016-06-21
相关资源
最近更新 更多