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.ac和Makefile.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)
将foreign选项添加到AM_INIT_AUTOMAKEin
configure.ac。这将告诉 autotools 您没有遵循 GNU 编码标准,并且 Automake 不会创建通常的 GNU 项目文本文件,包括 AUTHORS、COPYING、INSTALL、NEWS、README 和 ChangeLog 文件。这些文件的自动创建确实是相当无用的。您始终可以自己创建它们。
问题的原因是-fie--force标记为autoreconf.
它的手册页指出:“考虑所有文件都已过时”,这有点含糊,所以我最初无法将其与我的问题联系起来。它的html手动输入更加具有误导性:
甚至重新制作
configure比其输入文件更新的脚本和配置标头(configure.ac以及,如果存在aclocal.m4)。
它只谈论配置脚本,但实际上它也处理标准 GNU 文件。
事实证明,autoreconf -f实际上调用了automake --force-missing,其中有更明确的描述:“强制更新标准文件”,其 html 手动条目使其更加清晰:
与 一起使用时
--add-missing,会导致重新安装标准文件,即使它们已存在于源代码树中。[…]
-f从调用中删除标签autoreconf解决了这个问题。
结论:工作人员autoreconf无法编写手动条目。从事这项工作的人automake可以。