Autotools
Autotools (GNU build system) – zestaw narzędzi programistycznych, które pomagają w kompilowaniu kodu źródłowego i budowaniu przenośnych pakietów oprogramowania dla wielu systemów operacyjnych z rodziny UNIX.
Tworzenie przenośnego oprogramowania może sprawiać wiele trudności: kompilatory języka C różnią się na poszczególnych systemach, może brakować pewnych funkcji w bibliotekach programistycznych, pliki nagłówkowe mogą mieć różne nazwy. Jednym ze sposobów rozwiązania tego problemu jest pisanie kodu źródłowego z instrukcjami blokowymi wybieranymi przez dyrektywy preprocesora (#ifdef
), jednak różnorodność narzędzi do kompilacji sprawia, że to podejście szybko staje się nieporęczne. Narzędzia autotools zostały zaprojektowane aby ułatwić rozwiązanie tej kwestii.
GNU build system jest częścią GNU toolchain i jest szeroko wykorzystywany w wielu wolnych i otwartych projektach. Narzędzia Autotools są wolnym oprogramowaniem na licencji GNU GPL ze szczególnymi wyjątkami[1][2], zezwalającymi na wykorzystanie GNU build system w oprogramowaniu własnościowym.
Narzędzia wchodzące w skład GNU build system
[edytuj | edytuj kod]Autotools składa się z Autoconf, Automake i Libtool[3]. Innymi narzędziami używanymi z GNU build system są GNU make, GNU gettext, pkg-config i GNU Compiler Collection (GCC).
GNU Autoconf
[edytuj | edytuj kod]Autoconf generuje skrypt configure
bazując na zawartości pliku configure.ac
, który opisuje kod źródłowy. Uruchomiony skrypt configure
skanuje środowisko kompilacji, a następnie generuje podrzędny skrypt config.status
, który z kolei przetwarza pliki wejściowe, najczęściej Makefile.in
, tworząc pliki wyjściowe (Makefile
), które są właściwe dla danego środowiska kompilacji. Na koniec program make
wykorzystując Makefile
tworzy pliki wykonywalne z kodu źródłowego.
Złożoność narzędzi Autotools odzwierciedla mnogość warunków, w których kod źródłowy może być przetwarzany.
- Jeśli zmieniony został plik z kodem źródłowym, wystarczy uruchomić
make
, który ponownie skompiluje część kodu źródłowego dotkniętego zmianą. - Jeśli zmieniony został plik
.in
, należy ponownie uruchomićconfig.status
imake
. - Jeśli kod źródłowy został skopiowany do innego komputera, należy ponownie uruchomić
configure
(który z kolei uruchamiaconfig.status
) imake
. (Z tego powodu kod źródłowy kompilowany za pomocą GNU build system jest rozpowszechniany bez plików generowanych przezconfigure
.) - Jeśli zostały przeprowadzone większe zmiany w kodzie źródłowym, potrzebne będą zmiany w plikach
.in
iconfigure.ac
, a następnie wykonane kolejne kroki.
Aby przetworzyć pliki, autoconf wykorzystuje makroprocesor GNU m4.
Autoconf jest dostarczany z kilkoma pomocniczymi programami takimi jak:
- Autoheader, który pomaga zarządzać plikami nagłówkowymi.
- Autoscan, który wstępnie tworzy pliki wejściowe dla Autoconf.
ifnames
, który listuje identyfikatory preprocesora używane w programie.
GNU Automake
[edytuj | edytuj kod]Automake pomaga tworzyć przenośne pliki Makefile
, które następnie są przetwarzane przez program make
. Jako dane wejściowe wykorzystywany jest plik Makefile.am
, z którego tworzony jest plik Makefile.in
, służący do wygenerowania Makefile
za pomocą skryptu configure
.
GNU Libtool
[edytuj | edytuj kod]Libtool pomaga zarządzać tworzeniem statycznych i dynamicznych bibliotek na różnych systemach z rodziny UNIX. W tym celu Libtool wykorzystuje abstrakcję procesu tworzenia bibliotek, ukrywając różnice występujące na poszczególnych systemach (np. różnice pomiędzy systemem GNU/Linux a Solaris).
Gnulib
[edytuj | edytuj kod]Gnulib upraszcza proces tworzenia przenośnego oprogramowania dla wielu systemów, wykorzystującego w tym celu Autoconf i Automake.
Zalety GNU build system
[edytuj | edytuj kod]GNU build system pozwala programiście pisać wieloplatformowe oprogramowanie oraz ułatwia docelowemu użytkownikowi, który chce samodzielnie skompilować program, proces budowania programu. Użytkownik nie potrzebuje wówczas zainstalowanych na komputerze komponentów GNU build system, wystarczy, że uruchomi dostarczony skrypt configure
, wymagający obecności tylko powłoki systemowej kompatybilnej z powłoką Bourne’a.
Ograniczenia GNU build system
[edytuj | edytuj kod]GNU build system używa powłoki systemowej kompatybilnej z powłoką Bourne’a, wspomagając użytkownika w procesie konfiguracji i budowania programu. GNU build system może być wykorzystywany zarówno do tworzenia programów natywnych na danym komputerze, jak i do kompilacji skrośnej, w celu tworzenia programów na inne architektury komputerowe[4].
Oprogramowanie kompilowane skrośnie na systemie GNU/Linux lub innym z rodziny UNIX dla systemu Windows może być zrealizowane za pomocą MinGW, jednak często pożądane są natywne kompilacje dla niektórych systemów (takich jak Microsoft Windows), które nie mogą standardowo uruchamiać skryptów powłok Bourne’a. Istnieje możliwość instalacji Cygwin albo MSYS w systemie Windows, tworząc warstwę kompatybilności z systemem uniksowym, co umożliwia uruchomienie skryptu configure
. Cygwin dostarcza ponadto GNU Compiler Collection, GNU make oraz inne oprogramowanie świadcząc prawie kompletny system uniksowy w systemie Windows; MSYS również zawiera GNU make oraz pozostałe narzędzia zaprojektowane do pracy z MinGW (wersja GCC).
Projekty używające GNU build system niekoniecznie muszą dostarczać skrypt configure
w ich systemach kontroli wersji (takich jak CVS czy Subversion). Jeśli projekt wykorzystujący GNU build system nie posiada wygenerowanego pliku ./configure
dostępnego dla użytkownika, musi on sam go wygenerować. Jednym z możliwych sposobów jest uruchomienie narzędzia autoreconf
w powłoce systemowej:
$ autoreconf
Powyższe polecenie wyzwoli aclocal
, autoconf
, autoheader
i automake
, jeśli będzie to potrzebne. W niektórych przypadkach może być konieczne wywołanie dodatkowych poleceń. Popularną konwencją jest wówczas dostarczenie skryptu, często nazwanego autogen.sh
lub bootstrap
, który uruchamia wszystkie potrzebne narzędzia.
Pewnym ograniczeniem jest wygenerowany przez Autoconf skrypt configure
, który może okazać się powolny, ponieważ uruchamia programy takie jak kompilator języka C wiele razy w celu sprawdzenia obecności różnych bibliotek, plików nagłówkowych i funkcji językowych.
Zobacz też
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ Autoconf license exception
- ↑ libtool HACKING
- ↑ Learning the GNU development tools [online], autotoolset.sourceforge.net [dostęp 2017-11-22] (ang.).
- ↑ Autoconf, Automake, and Libtool: Cross Compilation [online], sources.redhat.com:80 [dostęp 2017-11-22] [zarchiwizowane z adresu 2012-06-19] .
Linki zewnętrzne
[edytuj | edytuj kod]- The GNU configure and build system (ang.)
- The pkg-config package (ang.)
- automake manual. sources.redhat.com. [zarchiwizowane z tego adresu (2011-10-28)]. (ang.)
- Dokumentacja GNU automake (ang.)
- Dokumentacja GNU autoconf (ang.)
- Autotools Tutorial (ang.)
- GNU Autoconf, Automake, and Libtool (ang.)
- Autotools: a practitioner's guide to Autoconf, Automake and Libtool. freesoftwaremagazine.com. [zarchiwizowane z tego adresu (2014-08-16)]. (ang.)