Opublikowano: 11-03-2016



Na Autotools składa się kilka aplikacji. Pierwsza, o której należy wspomnieć to autoconf. Jej początki sięgają lat 90, w których to równolegle było rozwijanych wiele innych systemów budowania (np. skrypt configure tworzony przez K. Richard Pixley'a, kolejny skrypt configure pisany przez R. Stallman'a, czy Imake z X Window System). W późniejszym czasie do autoconf dodany został automake wraz z aclocal, autoheader, libtool i innymi.

Autoconf skanuje plik configure.ac (dawniej configure.in), który został utworzony ręcznie lub za pomocą autoscan. Na jego podstawie oraz zawartości aclocal.m4 tworzony jest skrypt configure. configure.ac zawiera dyrektywy sprawdzające dostępność wybranej biblioteki, programu, elementu środowiska. Dla przykładu ten fragment:

AX_BOOST_PROGRAM_OPTIONS
if test "x$ax_cv_boost_program_options" != "xyes"; then
      AC_MSG_ERROR([cannot find the Boost Program Options library])
fi

sprawdza dostępność biblioteki Boost Program Options, powodując błąd, gdy takowej nie znajdzie.

Wygenerowany skrypt configure po uruchomieniu dokonuje odpowiedniego sprawdzenia środowiska oraz na podstawie plików Makefile.in tworzy pliki Makefile, a na podstawie config.h.in tworzy plik config.h. config.h.in jest szablonem wygenerowanym za pomocą autoheader. Skrypt configure modyfikuje szablon uzupełniając go o odpowiednie dyrektywy #define, co pozwala na tworzenie kodu C zależnego od wyniku działania configure - w końcu nie każdy brak biblioteki musi kończyć się błędem, można wyłączyć z użycia część programu od niej zależną.

Mowa była o pliku Makefile.in, ale takiego w źródłach projektów nie znajdziemy. Zamiast tego odnajdziemy plik Makefile.ac. Dawniej tworzono pliki Makefile.in ręcznie, jednak wiele treści powtarzało się w innych plikach Makefile.in i były one dość trudne w zarządzaniu. W związku z tym utworzono narzędzie automake (oraz aclocal i pozostałe). Na podstawie szablonu w pliku Makefile.ac tworzy ono konkretny plik Makefile.in, który będzie przetworzony przez skrypt configure (config.status).

Efektem działania pakietu Autotools są pliki Makefile pozwalające za pomocą jednego polecenia - make - zbudować projekt dla danego systemu.

Ten wpis nie jest tutorialem o Autotools, a jedynie pokazuje dość ogólnie sposób jego działania, dlatego jeśli chcesz dowiedzieć się więcej na ten temat to na samym dole znajdziesz linki, które warto odwiedzić. Bardzo dużo dowiesz się przeglądając i analizując źródła innych projektów (np. na GitHubie).

Oczywiście Autotools nie jest jedynym systemem budowania aplikacji. Innym, coraz popularniejszym systemem jest cmake. W mojej ocenie wypiera on wysłużone już Autotools. Do cmake powstają ciekawe inicjatywy jak Biicode. W moim projekcie pozostaję jednak przy Autotools jako klasycznym narzędziu stosowanym w systemach Uniksowych.



Comments powered by Disqus