为什么"做出分心"在这个非常基本的" Hello,World!" autotools的例子?

时间:2015-02-15 18:03:48

标签: c++ makefile autotools

为小“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([。])也可以。)

1 个答案:

答案 0 :(得分:0)

我建议运行 autoreconf -ivf 。我总是在每个项目中使用以下内容创建 autogen.sh 脚本。

#!/bin/sh

autoreconf -ivf
相关问题