如何防止automake覆盖INSTALL?

如何防止automake覆盖INSTALL?

我正在开发一个具有自定义INSTALL文件的项目。运行automake --add-missing(或更准确地说,autoreconf -i)将生成 GNU 默认INSTALL文件,并用它覆盖我们的文件。

我怎样才能防止这种行为?我希望它要么根本不生成 GNUINSTALL文件,要么用不同的名称创建它。

另外,我不想禁用automake可能生成的任何其他文件。


编辑1:来自automake手动的:

如果--add-missing给出该选项,automake将添加该文件的通用版本INSTALL以及COPYING包含当前版本的 GNU 通用公共许可证文本的文件 [...]。但是,现有COPYING 文件永远不会被automake.

它说现有COPYING文件不会被覆盖,但没有说明该INSTALL文件的任何内容,因此看起来它将被无条件覆盖。

编辑2:根据要求,这是我的configure.acMakefile.am,也是autogen.sh我们运行到autoreconf该项目的:

configure.ac:

AC_INIT([program name], [version number], [bug report], [short name], [url])
AC_CONFIG_SRCDIR([Main/Source/main.cpp])

AM_PROG_AS 
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_PROG_CXX

CFLAGS="$CFLAGS $SDL_CFLAGS "
LIBS="$LIBS $SDL_LIBS"
CPPFLAGS="$SDL_CFLAGS -DLINUX
          -DLOCAL_STATE_DIR=\\\"$sharedstatedir/<program name>\\\"
          -DDATADIR=\\\"$datadir\\\" -DUSE_SDL -DGCC"

AC_PROG_INSTALL
AC_PROG_RANLIB
AC_CONFIG_FILES(<list of Makefiles in subdirs>)
AC_OUTPUT

Makefile.am:

SUBDIRS = FooLib Main Bar Baz
EXTRA_DIST = LICENSING <and a bunch of unrelated files>

autogen.sh:

autoreconf -f -i

答案1

将选项添加foreignAM_INIT_AUTOMAKEconfigure.ac。这将告诉 autotools 您没有遵循 GNU 编码标准,并且 Automake 将不会创建通常的 GNU 项目文本文件,包括 AUTHORS、COPYING、INSTALL、NEWS、README 和 ChangeLog 文件。自动创建这些文件确实没什么用。您始终可以自己创建它们。

答案2

问题的原因是-fie--force标记为autoreconf.

它的手册页指出:“考虑所有文件已过时”,这有点含糊,所以我最初无法将其与我的问题联系起来。其html手动输入更具误导性的是:

甚至重新制作configure比其输入文件更新的脚本和配置标头(configure.ac以及,如果存在aclocal.m4)。

它只谈论配置脚本,但实际上它也处理标准 GNU 文件。

事实证明autoreconf -f实际上调用automake --force-missing,它有更明确的描述:“强制更新标准文件”,并且它的html手动输入使它更清楚:

与 一起使用时--add-missing,会导致重新安装标准文件,即使它们已存在于源代码树中。 […]

-f从调用中删除标签autoreconf可以解决这个问题。

结论:从事工作的人员autoreconf无法编写手动条目。从事这项工作的人automake可以。

相关内容