为什么 "make distcheck" 在这个非常基本的 "Hello, World!" 自动工具示例中失败?
Why does "make distcheck" fail on this very basic "Hello, World!" autotools example?
当 运行 "make distcheck" 对于下面描述的小 "Hello, World!" 示例时,我收到错误消息
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: 对于 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”生成Makefiles。然后执行 "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 > autoreconf.log 2>&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([auxiliary]) 添加到 configure.ac(也许 AC_CONFIG_AUX_DIR([.]) 也可以)。
我推荐 运行 autoreconf -ivf。我总是在每个项目中使用以下内容创建 autogen.sh 脚本。
#!/bin/sh
autoreconf -ivf
当 运行 "make distcheck" 对于下面描述的小 "Hello, World!" 示例时,我收到错误消息
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: 对于 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”生成Makefiles。然后执行 "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 > autoreconf.log 2>&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([auxiliary]) 添加到 configure.ac(也许 AC_CONFIG_AUX_DIR([.]) 也可以)。
我推荐 运行 autoreconf -ivf。我总是在每个项目中使用以下内容创建 autogen.sh 脚本。
#!/bin/sh
autoreconf -ivf