Autotools의 요점은 궁극적으로라는 쉘 스크립트로 컴파일되는 신비한 M4 매크로 기반 언어를 제공하는 것 ./configure
입니다. 이 컴파일 된 쉘 스크립트를 소스 코드와 함께 제공 할 수 있으며 해당 스크립트는 환경을 감지하고 빌드 할 프로그램을 준비하기 위해 모든 작업을 수행해야합니다. Autotools는 테스트를 조정하고 해당 셸 스크립트를 새로 고치려는 사람에게만 필요합니다.
GNU This 및 GNU That이 작동하려면 시스템에 설치되어야하는 경우 Autotools의 요점을 무너 뜨립니다. 원래는 프로그램을 다양한 유닉스 시스템으로 포팅하는 것을 단순화하기 위해 고안되었습니다. 생성 된 셸 코드에서 사용하는 구조조차도 ./configure
거의 모든 곳에서 깨진 모든 오래된 셸에서 작동하는지 확인하기 위해 매우 신중하게 선택해야했습니다.
당신이 겪고있는 문제는 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
모든 Auto-stuff 프로그램을 무해한 쉘 명령으로 대체 하도록 변경 했습니다.
Gawk의 실제 빌드 단계에는 Auto-stuff가 필요하지 않습니다! 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:
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에 대해 반복되어야합니다.
개발자가 작성한 프로그램의 원시적이고 공식적인 tarball로 이런 종류의 문제를 겪고 있다면 불평하십시오. 그냥 압축을 풀고해야, ./configure
그리고 make
당신이 어떤 Automake가 나 Autoconf에 자료를 아무것도 패치를 적용하거나 설치하지 않고.
이상적으로는 Git 헤드를 당길 때도 그렇게 작동해야합니다.