Automake:使用 make dist 删除配置脚本检查

Posted

技术标签:

【中文标题】Automake:使用 make dist 删除配置脚本检查【英文标题】:Automake: Remove configure script checks with make dist 【发布时间】:2013-05-11 22:53:31 【问题描述】:

我想知道在运行make dist 时是否有办法从configure 脚本中删除依赖项检查。目的是版本库中的包版本使用emacs 执行lisp 文件并生成.c 文件,而这些生成的源文件在运行make dist 时包含在tarball 中。 Automake 支持在输出 tarball 中包含构建文件,只需在 Makefile 中设置 EXTRA_DIST。我希望能够仅在有人尝试从存储库编译时检查emacs,但不能在有人从 tarball 编译时检查。

更具体地说,在configure.ac 我有:

 AM_PATH_LISPDIR
 AS_IF([test "$EMACS" = no], [AC_MSG_ERROR([cannot find emacs])])

但我希望在运行make dist 之后不要进行该检查。有什么办法可以做到这一点?如果不是,这个案子一般是怎么处理的?

【问题讨论】:

【参考方案1】:

我想出的最佳方法是检查Bootstrap 文件是否存在。运行make dist 后,Bootstrap 将从 tarball 中删除。

AC_CHECK_FILE([Bootstrap])
if test "$ac_cv_file_Bootstrap" == yes ; then
    <check for emacs>
fi

【讨论】:

【参考方案2】:

如果我在configure.ac 中找到该工具,我通常会设置一个条件:

AM_PATH_LISPDIR
AM_CONDITIONAL([HAVE_EMACS_IN_REPOSITORY], [test "x$EMACS" != xno -a -d ".git"])
AS_IF([test "$EMACS" = no -a -d ".git"], [AC_MSG_ERROR([cannot find emacs])])

然后在Makefile.am

if HAVE_EMACS_IN_REPOSITORY

Execute lisp files...

Generate .c files...

endif

通常configure.git 位于同一位置。如果没有,可以调整路径。

【讨论】:

这不是我想要的。如果源来自存储库,那么我想无条件地执行 lisp 文件,如果找不到 emacs,则失败并出现错误。 $IN_REPOSITORY 设置在哪里?这个变量真的是我所需要的。有了它,我可以将AM_PATH_LISPDIR 包装起来,以便仅在存储库中检查它。 @Brad,你从来没有具体说明你正在处理什么样的存储库,所以我无法回答这个问题。是 git、subversion、Mercurial、CVS、RCS、VSS? 恰好是一个git仓库。 我通常在 tarball 中包含引导脚本。我更容易将其视为corresponding source,即使它只是调用autoreconf

以上是关于Automake:使用 make dist 删除配置脚本检查的主要内容,如果未能解决你的问题,请参考以下文章

大型项目使用Automake/Autoconf完成编译配置(标准的编译过程已经变成了简单的三部曲:configure/make/make install,)

Automake:将本地便利行为添加到“make check”

GNU Automake - dist_bin_SCRIPTS 是如何工作的,我可以改变它吗?

sh 脚本只显示工具的版本,如果它们安装在系统中。 (clang make automake autoconf cmake)

Linux下automake工具使用(自动构建Makefile文件)

大型项目使用Automake/Autoconf完成编译配置