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)