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