Toàn bộ điểm của Autotools là cung cấp một ngôn ngữ dựa trên macro M4 phức tạp, ngôn ngữ này cuối cùng được biên dịch thành một tập lệnh shell được gọi là ./configure
. Bạn có thể gửi tập lệnh shell đã biên dịch này cùng với mã nguồn và tập lệnh đó sẽ thực hiện mọi thứ để phát hiện môi trường và chuẩn bị chương trình để xây dựng. Autotools chỉ nên được yêu cầu bởi những người muốn tinh chỉnh các bài kiểm tra và làm mới tập lệnh shell đó.
Nó đánh bại quan điểm của Autotools nếu GNU This và GNU That phải được cài đặt trên hệ thống để nó hoạt động. Ban đầu, nó được phát minh để đơn giản hóa việc chuyển các chương trình sang các hệ thống Unix khác nhau, không thể coi là có bất cứ thứ gì trên chúng. Ngay cả các cấu trúc được sử dụng bởi mã shell được tạo trong đó ./configure
cũng phải được lựa chọn rất cẩn thận để đảm bảo rằng chúng sẽ hoạt động trên mọi shell cũ bị hỏng ở mọi nơi.
Vấn đề bạn đang gặp phải là do một số bước Makefile bị hỏng được phát minh bởi những người chỉ đơn giản là không hiểu Autotools dùng để làm gì và vai trò của ./configure
tập lệnh cuối cùng .
Để giải quyết vấn đề này, bạn có thể vào Makefile và thực hiện một số thay đổi để giải quyết vấn đề này. Ví dụ, tôi đang xây dựng Git head của GNU Awk và gặp phải vấn đề tương tự. Makefile.in
Tuy nhiên, tôi đã áp dụng bản vá này và tôi có thể thành công 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@
Về cơ bản, tôi đã thay đổi mọi thứ để true
lệnh shell vô hại được thay thế cho tất cả các chương trình Tự động nội dung.
Các bước xây dựng thực tế cho Gawk không cần Nội dung tự động! Nó chỉ liên quan đến một số quy tắc được gọi nếu các phần của Nội dung tự động đã thay đổi và cần được xử lý lại. Tuy nhiên, Makefile được cấu trúc theo cách mà nó không thành công nếu các công cụ không có mặt.
Trước bản vá trên:
$ ./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
Sau bản vá:
$ ./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.
[...]
Bắt đầu. Như bạn có thể thấy, các CDPATH=
dòng lệnh ở đó là nơi Nội dung tự động được gọi, nơi bạn thấy các true
lệnh. Những báo cáo này đã kết thúc thành công, và vì vậy nó chỉ cần vượt qua mớ rác đó để thực hiện bản dựng được cấu hình hoàn hảo.
Tôi đã làm make gawk
vì có một số thư mục con được xây dựng nhưng không thành công; thủ thuật phải được lặp lại cho các Makefiles tương ứng của chúng.
Nếu bạn đang gặp phải vấn đề này với một bản tarball chính thức, nguyên sơ của chương trình từ các nhà phát triển của nó, thì hãy phàn nàn. Nó chỉ cần giải nén ./configure
và make
bạn không cần phải vá bất cứ thứ gì hoặc cài đặt bất kỳ tài liệu Automake hoặc Autoconf nào.
Tốt nhất, một cú kéo đầu Git của họ cũng nên hoạt động theo cách đó.