Zdezorientowany o configure script i Makefile.in

Obecnie uczę się, jak korzystać z autoconf/automake toolchain. Wydaje mi się, że mam ogólne zrozumienie przepływu pracy - w zasadzie masz skrypt configure.ac, który generuje plik wykonywalny configure. Wygenerowany skrypt configure jest następnie wykonywany przez użytkownika końcowego w celu wygenerowania Makefile s, dzięki czemu program może być zbudowany/zainstalowany.

Tak więc instalacja dla typowego użytkownika końcowego jest w zasadzie:]}
./configure
make
make install
make clean

Ok, teraz tu jestem zdezorientowany:

Jako deweloper zauważyłem to, że automatycznie wygenerowany skrypt configure czasami nie uruchomi się i będzie się wyświetlał błąd:

config.status: error: cannot find input file: `somedir/Makefile.in' 

To mnie myli, ponieważ myślałem, że skrypt configure ma wygenerować Makefile.in. Szukając odpowiedzi w Googlach odkryłem, że można to naprawić za pomocą skryptu autogen.sh, który w zasadzie "resetuje" stan środowiska autoconf. Typowy autogen.sh skrypt byłby podobny do:

aclocal \
&& automake --add-missing \
&& autoconf
Dobrze. Ale jako użytkownik końcowy, który pobrał niezliczoną ilość tarballs przez całe moje życie, nigdy nie musiałem używać autogen.sh skryptu. Wszystko, co zrobiłem, to rozpakować tarball, i zrobić zwykły configure/make / make install / make clean rutynowych.

Ale jako programista, który teraz używa autoconf, wygląda na to, że configure nie działa, chyba że najpierw biegniesz autogen.sh. Uważam to za bardzo mylące, ponieważ uznałem, że użytkownik końcowy nie powinien uruchamiać autogen.sh.

Więc dlaczego muszę najpierw uruchomić autogen.sh - aby skonfigurować skrypt do znalezienia Makefile.in? Dlaczego skrypt configure nie generuje go po prostu?

Author: Siler, 2014-11-09

1 answers

Aby naprawdę zrozumieć narzędzia autotools, musisz pamiętać, skąd pochodzą: pochodzą ze świata open source, w którym są (a) programiści, którzy pracują z repozytorium kodu źródłowego (CVS, Git, itp.) i utworzenie pliku TAR lub podobnego zawierającego kod źródłowy i umieszczenie tego pliku tar na stronie pobierania, oraz (b) użytkownicy końcowi, którzy otrzymują plik tar z kodem źródłowym, kompilują ten kod źródłowy w swoim systemie i używają wynikowego pliku binarnego. Oczywiście ludzie w group (a) również kompilować kod i używać wynikowy binarny, ale ludzie w group (b) nie mieć lub potrzebować, często, wszystkie narzędzia dla Rozwój że ludzie w group (a) potrzebować.

Więc korzystanie z narzędzi jest nastawione na ten podział, gdzie ludzie z grupy (b) nie mają dostępu do autoconf, automake, itp.

Podczas korzystania z autoconf, ludzie zazwyczaj sprawdzają w pliku configure.ac (wejście do autoconf) do kontroli źródła, ale nie sprawdzają w wyjściu autoconf, configure skrypt (niektóre projekty sprawdzają się oczywiście w skrypcie configure: to zależy od Ciebie).

Podczas korzystania z automake, ludzie zazwyczaj sprawdzają w pliku Makefile.am (Wejście do automake), ale nie sprawdzają w wyjściu automake: Makefile.in.

Skrypt configure zasadniczo sprawdza Twój system pod kątem różnych opcjonalnych elementów, których pakiet może lub nie potrzebuje, gdzie można je znaleźć, itp. Po znalezieniu tych informacji może użyć ich do konwersji różnych plików XXX.in (zazwyczaj, ale nie wyłącznie, Makefile.in) do plików XXX (na przykład Makefile).

Więc kroki zazwyczaj idą tak: napisz configure.ac i Makefile.am i sprawdź je. Aby zbudować projekt na podstawie kontroli kodu źródłowego, Uruchom autoconf, aby wygenerować configure z configure.ac. Uruchom automake, aby wygenerować Makefile.in z Makefile.am. Uruchom configure, aby wygenerować Makefile z Makefile.in. Uruchom make, aby zbudować produkt.

Jeśli chcesz wydać kod źródłowy (jeśli tworzysz produkt open source, który wydaje kod źródłowy), Uruchom autoconf i automake, następnie połącz kod źródłowy z plikami configure i Makefile.in, aby ludzie budujący wydanie kodu źródłowego po prostu potrzebowali make i kompilatora i nie potrzebowali żadnych autotools.

Ponieważ kolejność uruchamiania autoconf i automake (i libtool jeśli go używasz) może być trudna istnieją Skrypty takie jak autogen.sh i autorekonf itp. które są sprawdzane w source control do wykorzystania przez programistów budujących z source control, ale nie są one potrzebne / używane przez ludzi budujących z kodu źródłowego wydania pliku tar itp.

Autoconf i automake są często używane razem, ale możesz użyć autoconf bez automake, jeśli chcesz napisać własne Makefile.in.

 28
Author: MadScientist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-09 20:14:13