如何克服“'aclocal-1.15' is missing on your system”警告?

How to overcome "'aclocal-1.15' is missing on your system" warning?

我正在尝试 运行 github 上的 c++ 程序。 (可在以下linkhttps://github.com/mortehu/text-classifier

我有一个 mac,我正在尝试在终端中 运行 它。我想我已经下载了 autoconf 和 automake 但不确定。对于 运行 程序,我将转到终端中的正确文件夹,然后 运行ning

./configure && make 

但我收到错误消息:

WARNING: 'aclocal-1.15' is missing on your system. You should only need it if you modified 'acinclude.m4' or 'configure.ac' or m4 files included by 'configure.ac'. The 'aclocal' program is part of the GNU Automake package: http://www.gnu.org/software/automake It also requires GNU Autoconf, GNU m4 and Perl in order to run: http://www.gnu.org/software/autoconf http://www.gnu.org/software/m4/ http://www.perl.org/ make: *** [aclocal.m4] Error 127

我有 xcode 和 g++ 以及 运行 c 程序所需的所有东西,但很明显,我不知道我在做什么。

上面link中的程序运行最简单、最简单的方法是什么?我知道它带有自述文件和示例用法,但我无法让它工作。

通常,您不需要任何 auto* 工具,最简单的解决方案是在相关文件夹中 运行 touch aclocal.m4 configure(以及 运行 touchMakefile.amMakefile.in 上(如果存在)。这将更新 aclocal.m4 的时间戳并提醒系统 aclocal.m4 是最新的,不需要重建。在此之后,最好清空你的 build 目录,然后从头开始重新 运行 configure。我 运行 经常陷入这个问题。对我来说,根本原因是我从另一个文件夹复制了一个库(例如 mpfr gcc 的代码)并且时间戳发生了变化。

当然,如果您确实需要重新生成这些文件,则此技巧无效,这可能是因为您手动更改了它们。但希望软件包的开发人员分发最新文件。


当然,如果您确实想安装 automake 和朋友,请为您的发行版使用适当的包管理器。


安装automake自带的aclocal:

brew install automake          # for Mac
apt-get install automake       # for Ubuntu

再试一次:

./configure && make 

在 运行 ./configure 之前尝试 运行 autoreconf -f -i。 autoreconf 程序根据需要自动运行 autoheader、aclocal、automake、autopoint 和 libtoolize。

编辑添加: 这通常是由于从 Git 中检出代码而不是从 .zip.tar.gz 中提取代码造成的档案。为了在文件更改时触发重建,Git 不保留文件的时间戳,因此 configure 脚本可能看起来已过时。正如其他人所提到的,如果您没有足够新的 autoreconf.

版本,则有一些方法可以解决这个问题

另一个编辑:这个错误也可能是由于使用 scp 从存档中提取的源文件夹复制到另一台机器造成的。可以更新时间戳,表明需要重建。为避免这种情况,请复制存档并将其提取到位。

可能适用于也可能不适用于此特定案例的通用答案:

正如错误消息提示的那样,只有在您修改了用于生成 aclocal.m4 的文件时才需要 aclocal-1.15

如果您不修改任何这些文件(包括 configure.ac),那么您不需要 aclocal-1.15。

在我的例子中,问题不是这些文件中的任何一个被修改了,而是 configure.ac 上的时间戳比 aclocal.m4 晚了 6 分钟。

我还没弄明白为什么,但是我的 git 存储库的干净克隆解决了我的问题。也许与 git 相关的内容以及它最初是如何创建文件的。

与其重新运行 autoconf 和朋友,我会只是尝试获得一个干净的克隆然后再试一次

也有可能有人对 configure.ac 进行了更改,但没有重新生成 aclocal.m4,在这种情况下,您确实必须重新运行 automake 和朋友。

Autotools 的全部意义在于提供一种神秘的基于 M4 宏的语言,它最终编译成一个名为 ./configure 的 shell 脚本。您可以将此已编译的 shell 脚本与源代码一起发送,该脚本应尽一切努力检测环境并为构建程序做准备。 Autotools 应该只有那些想要调整测试和刷新 shell 脚本的人才需要。

如果 GNU This 和 GNU That 必须安装在系统上才能工作,这就违背了 Autotools 的意义。最初,它是为了简化程序到各种 Unix 系统的移植而发明的,不能指望它们有任何东西。甚至 ./configure 中生成的 shell 代码使用的结构也必须非常仔细地选择,以确保它们可以在几乎所有地方的每个破旧的 shell 上工作。

您 运行 遇到的问题是由于一些不了解 Autotools 的用途以及最终 ./configure 脚本的作用的人发明的一些损坏的 Makefile 步骤。

作为解决方法,您可以进入 Makefile 并进行一些更改以解决此问题。例如,我将 GNU Awk 的 Git 头和 运行 构建到同一个问题中。但是,我将此补丁应用于 Makefile.in,并且我可以成功 make gawk:

差异--git a/Makefile.in b/Makefile.in

index 5585046..b8b8588 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -312,12 +312,12 @@ distcleancheck_listfiles = find . -type f -print

 # Directory for gawk's data files. Automake supplies datadir.
 pkgdatadir = $(datadir)/awk
-ACLOCAL = @ACLOCAL@
+ACLOCAL = true
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
+AUTOCONF = true
+AUTOHEADER = true
+AUTOMAKE = true
 AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@

基本上,我改变了一些东西,以便用无害的 true shell 命令代替所有自动填充程序。

Gawk 的实际构建步骤不需要 Auto-stuff!它只涉及一些规则,如果自动填充的部分内容发生变化并需要重新处理,这些规则就会被调用。但是,如果工具不存在,Makefile 的结构就会失败。

在上述补丁之前:

$ ./configure
[...]
$ make gawk
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/kaz/gawk/missing aclocal-1.15 -I m4
/home/kaz/gawk/missing: line 81: aclocal-1.15: command not found
WARNING: 'aclocal-1.15' is missing on your system.
         You should only need it if you modified 'acinclude.m4' or
         'configure.ac' or m4 files included by 'configure.ac'.
         The 'aclocal' program is part of the GNU Automake package:
         <http://www.gnu.org/software/automake>
         It also requires GNU Autoconf, GNU m4 and Perl in order to run:
         <http://www.gnu.org/software/autoconf>
         <http://www.gnu.org/software/m4/>
         <http://www.perl.org/>
make: *** [aclocal.m4] Error 127

补丁后:

$ ./configure
[...]
$ make gawk
CDPATH="${ZSH_VERSION+.}:" && cd . && true -I m4
CDPATH="${ZSH_VERSION+.}:" && cd . && true
gcc -std=gnu99 -DDEFPATH='".:/usr/local/share/awk"' -DDEFLIBPATH="\"/usr/local/lib/gawk\"" -DSHLIBEXT="\"so"\" -DHAVE_CONFIG_H -DGAWK -DLOCALEDIR='"/usr/local/share/locale"' -I.     -g -O2 -DNDEBUG -MT array.o -MD -MP -MF .deps/array.Tpo -c -o array.o array.c 
[...]
gcc -std=gnu99  -g -O2 -DNDEBUG  -Wl,-export-dynamic -o gawk array.o awkgram.o builtin.o cint_array.o command.o debug.o dfa.o eval.o ext.o field.o floatcomp.o gawkapi.o gawkmisc.o getopt.o getopt1.o int_array.o io.o main.o mpfr.o msg.o node.o profile.o random.o re.o regex.o replace.o str_array.o symbol.o version.o      -ldl -lm
$ ./gawk --version
GNU Awk 4.1.60, API: 1.2
Copyright (C) 1989, 1991-2015 Free Software Foundation.
[...]

好了。如您所见,CDPATH= 命令行是调用 Auto-stuff 的地方,您可以在其中看到 true 命令。这些报告成功终止,因此它只是通过那些垃圾来进行该死的构建,这是完美配置的。

我做了 make gawk 因为有些子目录构建失败了;必须为各自的 Makefile 重复该技巧。

如果您 运行 对这种事情感兴趣,并使用其开发人员提供的程序的原始官方 tarball,那就抱怨吧。它应该只是解压,./configuremake 而无需修补任何东西或安装任何 Automake 或 Autoconf 材料。

理想情况下,拉动他们的 Git 头也应该如此。

问题不在于automake包,在于存储库

sudo apt-get install automake

安装版本 aclocal-1.4,这就是为什么您找不到 1.5(在 Ubuntu 14,15)

使用这个脚本安装最新的 https://github.com/gp187/nginx-builder/blob/master/fix/aclocal.sh

您可以轻松安装您需要的版本:

首先获取源码:

$ wget https://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz

解压:

$ tar -xzvf automake-1.15.tar.gz

构建并安装:

$ cd automake-1.15
$ ./configure  --prefix=/opt/aclocal-1.15
$ make
$ sudo mkdir -p /opt
$ sudo make install

使用它:

$ export PATH=/opt/aclocal-1.15/bin:$PATH
$ aclocal --version

aclocal(GNU automake)1.15

现在调用 aclocal 时,您会得到正确的版本。

2017 - 高山脉

让 autoconf 1.15 在 Mac 上工作真的很难。我们聘请了一位专家来让它发挥作用。一切都很顺利。

后来我碰巧把 Mac 升级到 High Sierra。

Docker 管道停止工作!

即使 autoconf 1.15 在 Mac.

上工作正常

如何修复,

简短的回答,我简单地删除了本地存储库,然后再次检查了存储库。

此质量检查页面和其他地方的组合中注明了此建议。

然后它工作正常!

它可能与 aclocal.m4 和类似文件有关。 (但谁知道真的)。我没完没了地按摩那些文件……但什么也没有。

出于某种未知原因,如果您只是擦掉您的存储库并再次获取存储库:一切正常!

我尝试了好几个小时 touching/deleting 等相关文件的每个组合,但没有。只需从头检查回购!

我认为触摸命令是正确的答案,例如做一些像

touch --date="`date`" aclocal.m4 Makefile.am configure Makefile.in

在[./configure && make]之前

侧边栏 I:否则,我同意@kaz:为 aclocal.m4 添加依赖项 and/or 配置 and/or Makefile.am and/or Makefile.in 做出假设关于可能无效的目标系统。具体来说,这些假设是

1) 所有目标系统都有自动工具,

2) 所有目标系统都具有相同版本的 autotools(例如本例中的 automake.1.15)。

3) 如果 (1) 或 (2) 对任何用户都不成立,则用户正在从维护者生成的 TAR 或 ZIP 格式中提取包,该格式维护相关时间戳文件,在这种情况下,配置生成的 Makefile 中的所有 autotool/configure/Makefile.am/Makefile.in 依赖项将在 发出 make 命令之前 得到满足。

第二个假设在许多 Mac 系统上都失败了,因为 automake.1.14 是 OSX 的 "latest"(至少这是我在 MacPorts 中看到的, brew 显然也是如此。

第三个假设在 Github 的世界中完全失败了。这种失败是 "everyone thinks they are normative" 心态的一个例子;具体来说,维护者是 唯一 class 应该需要编辑 Makefile.am 的用户,现在已经把 每个人 到 class.

也许 autowhatever 中有一个选项可以防止将这些依赖项添加到 Makefile.in and/or Makefile。

侧边栏 II [为什么@kaz 是正确的]:当然,对我和其他专家来说,简单地尝试一系列 [touch] 命令来欺骗配置创建的 Makefile 从重新 运行 配置和自动工具。但这不是配置的重点;配置的重点是确保尽可能多的不同系统上的尽可能多的用户可以简单地执行 [./configure && make] 并继续;大多数用户对 "shaving the yak" 不感兴趣,例如调试 autotools 开发人员的错误假设。

侧边栏 III:可以说 ./configure,现在 autotools 添加了这些依赖项,是与 Github-分布式包一起使用的错误构建工具。

侧边栏 IV:也许基于配置的 Github 存储库应该将必要的触摸命令放入他们的自述文件中,例如https://github.com/drbitboy/Tycho2_SQLite_RTree.

2018,又一个解决方案...

https://github.com/apereo/mod_auth_cas/issues/97

某些情况下只是运行

$ autoreconf -f -i

没有别的....解决了问题。

您在目录 /pcre2-10.30 中执行此操作。

真是一场噩梦。

(这在 2017 年通常 没有 解决问题,但现在通常 似乎解决了问题 - 他们修复了一些东西。此外,您的 Dockerfile 似乎现在通常应以“FROM ibmcom/swift-ubuntu”开头;以前您必须提供特定的 version/dev-build 才能使其工作。)