![如何防止automake覆盖INSTALL?](https://linux22.com/image/63377/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2automake%E8%A6%86%E7%9B%96INSTALL%EF%BC%9F.png)
我正在开发一个具有自定义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
Makefile.am
:
SUBDIRS = FooLib Main Bar Baz
EXTRA_DIST = LICENSING <and a bunch of unrelated files>
autogen.sh
:
autoreconf -f -i
答案1
将选项添加foreign
到AM_INIT_AUTOMAKE
中
configure.ac
。这将告诉 autotools 您没有遵循 GNU 编码标准,并且 Automake 将不会创建通常的 GNU 项目文本文件,包括 AUTHORS、COPYING、INSTALL、NEWS、README 和 ChangeLog 文件。自动创建这些文件确实没什么用。您始终可以自己创建它们。
答案2
问题的原因是-f
ie--force
标记为autoreconf
.
它的手册页指出:“考虑所有文件已过时”,这有点含糊,所以我最初无法将其与我的问题联系起来。其html手动输入更具误导性的是:
甚至重新制作
configure
比其输入文件更新的脚本和配置标头(configure.ac
以及,如果存在aclocal.m4
)。
它只谈论配置脚本,但实际上它也处理标准 GNU 文件。
事实证明,autoreconf -f
实际上调用automake --force-missing
,它有更明确的描述:“强制更新标准文件”,并且它的html手动输入使它更清楚:
与 一起使用时
--add-missing
,会导致重新安装标准文件,即使它们已存在于源代码树中。 […]
-f
从调用中删除标签autoreconf
可以解决这个问题。
结论:从事工作的人员autoreconf
无法编写手动条目。从事这项工作的人automake
可以。