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@
基本上,我进行了更改,以便将无害的true
shell命令替换为所有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:
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http:
<http:
<http:
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重复此技巧。
如果您正与该程序的开发者提供的原始,正式的压缩文件一起遇到这种情况,请投诉。它应该只是打开包装,./configure
而make
无需修补任何东西或安装任何Automake或Autoconf资料。
理想情况下,拉动Git头的行为也应如此。