为小“Hello,World!”运行“make distcheck”时下面描述的示例,我收到错误消息
ERROR: files left in build directory after distclean:
./install-sh
./depcomp
./missing
为什么会生成这些错误消息?为什么autotools不会导致删除这些文件?
我在GNU / Linux(Fedora)3.18.5-101.fc20.x86_64上使用GNU autoconf 2.69和GNU automake 1.13.4。
编辑2015-02-17:我对https://www.gnu.org/software/automake/manual/automake.html#Creating-amhello中描述的am-hello示例也有同样的行为。该描述意味着不应生成错误消息。
configure.ac包含:
AC_PREREQ([2.69])
AC_INIT([hello], [1.0], [bugs@my.domain])
AC_CONFIG_SRCDIR([src/hello.cc])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE
AC_PROG_CXX
AC_CONFIG_FILES([Makefile
src/Makefile])
AC_OUTPUT
Makefile.am包含:
SUBDIRS = src
src / Makefile.am包含:
bin_PROGRAMS = hello
hello_SOURCES = hello.cc
src / hello.cc包含:
#include <iostream> // for cout
int main(int argc, char* argv[])
{
std::cout << "Hello, World!" << std::endl;
return 0;
}
文件NEWS,README,AUTHORS和ChangeLog存在但是为空。
执行“autoreconf --install”以生成“configure”脚本。然后执行“./configure”生成Makefile。然后执行“make distcheck”以查看包是否已准备好分发。我收到错误消息
ERROR: files left in build directory after distclean:
./install-sh
./depcomp
./missing
如果我通过再次运行“autoreconf”和“make distcheck”来执行此操作,则不会生成任何错误消息。
编辑2015-02-21 :我无法在我第一次注意到它的系统上重现这个问题。自从我注意到问题以来,我接受了一些软件包更新,但没有包含对automake或autoconf的更新。系统现在为3.18.7-100.fc20.x86_64。我仍然可以在另一个系统上重现问题,第一个系统的克隆但没有最新的软件包更新。那个目前是3.18.6-100.fc20.x86_64。两个系统上提到的文件的MD5校验和是相同的。我在两个系统上运行了“autoreconf --install -v -d&gt; autoreconf.log 2&gt;&amp; 1”,并比较了生成的autoreconf.log文件。有差异,但它们对我没有任何意义。在autoconf(2.69),autoheader(2.69),automake(1.13.4),aclocal(1.13.4),autopoint(0.18.3)和libtoolize(2.4.2)两种情况下都报告了相同的版本号。我之前在原系统上注意到了(当问题仍然可以重现时),然后“depcomp”,“install-sh”和“missing”文件被写入了 parent 目录。包主目录,好像AC_CONFIG_AUX_DIR([..])包含在configure.ac中 - 它不是。解决方法是将AC_CONFIG_AUX_DIR([辅助])添加到configure.ac(也可能AC_CONFIG_AUX_DIR([。])也可以。)
答案 0 :(得分:0)
我建议运行 autoreconf -ivf 。我总是在每个项目中使用以下内容创建 autogen.sh 脚本。
#!/bin/sh
autoreconf -ivf