为什么"make distcheck"在这个非常基本的"Hello, World!"自动工具示例中失败?

Why does "make distcheck" fail on this very basic "Hello, World!" autotools example?

本文关键字:World 工具 失败 Hello distcheck make 非常 为什么      更新时间:2023-10-16

当为下面描述的小"Hello,World!"示例运行"make-distcheck"时,我会收到错误消息

ERROR: files left in build directory after distclean:
./install-sh
./depcomp
./missing

为什么会生成这些错误消息?为什么自动工具不导致这些文件被删除?

我在GNU/Linux(Fedora)3.18.5-101.fc20.x86_64上使用GNU autoconf 2.69和GNU automake 1.13.4。

编辑2015-02-17:我也得到了与上描述的am-hello示例相同的行为https://www.gnu.org/software/automake/manual/automake.html#Creating-你好。该描述意味着不应该生成错误消息。

config.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"生成Makefiles。然后执行"makedistcheck"以查看包是否已准备好分发。我收到错误消息

ERROR: files left in build directory after distclean:
./install-sh
./depcomp
./missing

如果我再次运行"autoreconf"answers"makedistcheck",则不会生成错误消息。

编辑2015-02-21:我无法在我第一次注意到问题的系统上重现该问题。自我注意到该问题以来,我接受了一些包更新,但不包括对automake或autoconf的更新。系统现在的版本为3.18.7-100.fc20.x86_64。我仍然可以在另一个系统上重现这个问题,这是第一个系统的克隆,但没有最新的软件包更新。该价格目前为3.18.6-100.fc20.x86_64。上述文件的MD5校验和在两个系统上都是相同的。我在两个系统上都运行了"autoreconf--install-v-d>autoreconf.log 2>&1",并比较了生成的autoreconf.log文件。虽然有差异,但对我来说没有任何意义。在两种情况下,autoconf(2.69)、autoheader(2.68)、automake(1.13.4)、aclocal(1.13.4,然后,"丢失"的文件被写入包主目录的目录,就好像AC_CONFIG_AUX_DIR([..])包含在CONFIG.AC中一样——事实并非如此。解决方法是将AC_CONFIG_AUX_DIR([axiliary])添加到配置.AC中(也许AC_CONFIG_AUX_DIR([.])也可以)。

我建议运行autoreconf-iff。我总是在每个项目中创建autogen.sh脚本,其中包含以下内容。

#!/bin/sh
autoreconf -ivf