Loading AI tools
Z Wikipedii, wolnej encyklopedii
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.
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).
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.
make
, który ponownie skompiluje część kodu źródłowego dotkniętego zmianą..in
, należy ponownie uruchomić config.status
i make
.configure
(który z kolei uruchamia config.status
) i make
. (Z tego powodu kod źródłowy kompilowany za pomocą GNU build system jest rozpowszechniany bez plików generowanych przez configure
.).in
i configure.ac
, a następnie wykonane kolejne kroki.Aby przetworzyć pliki, autoconf wykorzystuje makroprocesor GNU m4.
Autoconf jest dostarczany z kilkoma pomocniczymi programami takimi jak:
ifnames
, który listuje identyfikatory preprocesora używane w programie.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
.
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 upraszcza proces tworzenia przenośnego oprogramowania dla wielu systemów, wykorzystującego w tym celu Autoconf i Automake.
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.
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.