如何克服"'aclocal-1.15'在您的系统上缺失"警告?

Lia*_*ynn 67 c++ automake makefile github

我试图在github上运行一个c ++程序.(可从以下链接获得https://github.com/mortehu/text-classifier)

我有一台Mac,我正试图在终端上运行它.我想我已经下载了autoconf和automake,但我不确定.要运行该程序,我将转到终端中正确的文件夹,然后运行

./configure && make 
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

警告:系统中缺少"aclocal-1.15".如果您修改'configure.ac'或'configure.ac'或'configure.ac'包含的m4文件,您应该只需要它.'aclocal'程序是GNU Automake软件包的一部分:http: //www.gnu.org/software/automake 它还需要GNU Autoconf,GNU m4和Perl才能运行:http : //www.gnu.org/software/autoconf http://www.gnu.org/software/m4/ http://www.perl.org/ make:***[aclocal.m4]错误127

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

在上面的链接中运行程序最简单,最简单的方法是什么?我意识到它带有自述文件和示例用法,但我无法让它工作.

mor*_*ehu 129

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

编辑补充:从Git的检查出代码,而不是从它提取这通常是由于.zip.tar.gz存档.为了在文件更改时触发重建,Git不会保留文件的时间戳,因此 configure脚本可能看起来已过时.正如其他人所提到的,如果你没有足够的最新版本,有办法解决这个问题autoreconf.

另一个编辑:此错误也可能是由将使用scp从存档中提取的源文件夹复制到另一台计算机引起的.时间戳可以更新,表明需要重建.要避免这种情况,请复制存档并将其解压缩到位.


eml*_*lai 40

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

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


当然,如果您确实想要安装automake和朋友,请使用适当的包管理器进行分发.


安装automake附带的aclocal:

brew install automake          # for Mac
apt-get install automake       # for Ubuntu
Run Code Online (Sandbox Code Playgroud)

再试一次:

./configure && make 
Run Code Online (Sandbox Code Playgroud)


Dro*_*com 8

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

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

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

在我的情况下,问题不是这些文件中的任何一个都被修改了,但是与aclocal.m4相比,configure.ac的时间戳在6分钟之后.

我还没弄清楚为什么,但是我的git repo的一个干净的克隆为我解决了这个问题.也许是与git相关的东西以及它如何创建文件.

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

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


Bri*_*ich 8

我认为触摸命令是正确的答案,例如做类似的事情

touch --date="`date`" aclocal.m4 Makefile.am configure Makefile.in
Run Code Online (Sandbox Code Playgroud)

在[./configure && make]之前。

侧边栏 I:否则,我同意 @kaz:添加 aclocal.m4 和/或 configure 和/或 Makefile.am 和/或 Makefile.in 的依赖项对目标系统可能无效的假设。具体来说,这些假设是

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

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

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

第二个假设在许多 Mac 系统上失败,因为 automake.1.14 是 OSX 的“最新”版本(至少我在 MacPorts 中看到的是这样,显然对于 brew 来说也是如此)。

在有 Github 的世界里,第三个假设彻底失败了。这次失败是“每个人都认为自己很规范”心态的一个例子;具体来说,维护者是唯一需要编辑 Makefile.am 的用户类别,现在已将所有人归入该类别。

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

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

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

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


Fre*_*ger 6

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

首先获取来源:

$ wget https://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz
Run Code Online (Sandbox Code Playgroud)

打开包装:

$ tar -xzvf automake-1.15.tar.gz
Run Code Online (Sandbox Code Playgroud)

构建并安装:

$ cd automake-1.15
$ ./configure  --prefix=/opt/aclocal-1.15
$ make
$ sudo mkdir -p /opt
$ sudo make install
Run Code Online (Sandbox Code Playgroud)

用它:

$ export PATH=/opt/aclocal-1.15/bin:$PATH
$ aclocal --version
Run Code Online (Sandbox Code Playgroud)

aclocal(GNU automake)1.15

现在,当调用aclocal时,您将获得正确的版本。


Kaz*_*Kaz 5

Autotools的全部重点是提供一种基于M4宏的奥秘语言,最终将其编译为名为的Shell脚本./configure。您可以将此编译后的Shell脚本与源代码一起提供,并且该脚本应执行所有操作以检测环境并准备要构建的程序。只有要调整测试并刷新该Shell脚本的人员才需要使用自动工具。

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

您遇到的问题是由于人们根本不了解Autotools的用途以及最终./configure脚本的作用而导致的Makefile步骤损坏。

作为一种解决方法,您可以进入Makefile并进行一些更改以使其摆脱干扰。例如,我正在构建GNU Awk的Git负责人,并遇到了同样的问题。我将此补丁应用到Makefile.in,但是我可以成功make gawk

diff --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@
Run Code Online (Sandbox Code Playgroud)

基本上,我进行了更改,以便将无害的trueshell命令替换为所有Auto-stuff程序。

Gawk的实际构建步骤不需要自动填充!如果自动填充的某些部分已更改并且需要重新处理,则仅在某些被调用的规则中涉及。但是,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
Run Code Online (Sandbox Code Playgroud)

补丁之后:

$ ./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.
[...]
Run Code Online (Sandbox Code Playgroud)

好了 如您所见,在CDPATH=命令行中有调用Auto-stuff的位置,在此处您可以看到true命令。这些报告成功终止了,因此恰好遇到了垃圾,可以进行完美配置的精简版本。

我这样做make gawk是因为有一些构建失败的子目录。必须为它们各自的Makefile重复此技巧。

如果您正与开发人员的原始程序正式包一起遇到这种情况,请投诉。它应该只是打开包装,./configuremake无需修补任何东西或安装任何Automake或Autoconf资料。

理想情况下,拉动Git头的行为也应如此。


Fat*_*tie 5

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

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

某些情况下只是运行

$ autoreconf -f -i
Run Code Online (Sandbox Code Playgroud)

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

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

什么样的恶梦。

(这通常并没有解决这个问题在2017年,但现在一般不会似乎来解决这个问题-他们固定的东西而且,看来你Dockerfile现在应该通常以“FROM ibmcom /快捷Ubuntu的”开始;以前你不得不放弃。某个版本/开发构建以使其工作。)