如何防止automake覆盖INSTALL?

zen*_*ith 6 gnu automake autoreconf autotools

我正在处理一个具有自定义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
Run Code Online (Sandbox Code Playgroud)

Makefile.am

SUBDIRS = FooLib Main Bar Baz
EXTRA_DIST = LICENSING <and a bunch of unrelated files>
Run Code Online (Sandbox Code Playgroud)

autogen.sh

autoreconf -f -i
Run Code Online (Sandbox Code Playgroud)

Fah*_*tha 5

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


zen*_*ith 4

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

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

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

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

事实证明autoreconf -f实际上调用了automake --force-missing,其中有更明确的描述:“强制更新标准文件”,其 html 手动条目使其更加清晰:

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

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

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