Autotools: Różnice pomiędzy wersjami

[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
JackieBot (dyskusja | edycje)
m robot dodaje: ru:Autotools
rozwinięcie aktykułu (tłumaczenie z angielskiej wiki)
Linia 1:
[[Image:Heckert GNU white.svg|thumb|Logo GNU]]
'''Autotools''' ('''GNU Build System''') - Zestaw narzędzi programistycznych stworzonych przez projekt [[GNU]], które pomagają w budowaniu programów w systemach [[System uniksopodobny|uniksopodobnych]]. Jest częścią [[GNU Toolchain]] i jest szeroko używany w wielu projektach wolnego oprogramowania jak i w projektach własnościowych. Podczas gdy narzędzia stanowiące Autotools są rozpowszechniane na wolnej licencji GPL, nie ma przeciwwskazań w używaniu ich w projektach własnościowych.
 
'''Autotools (GNU build system)''' - zestaw [[Narzędzie programistyczne|narządzi programistycznych]], które pomagają w kompilowaniu [[Kod źródłowy|kodu źródłowego]] i budowaniu [[Port (oprogramowanie)|przenośnych]] [[Pakiet oprogramowania|pakietów oprogramowania]] dla wielu [[System operacyjny|systemów operacyjnych]] z rodziny [[UNIX]].
 
Tworzenie przenośnego oprogramowania może sprawiać wiele trudności: [[Kompilator|kompilatory]] języka [[C (język programowania)]] różnią się na poszczególnych systemach, może brakować pewnych funkcji w [[Biblioteka programistyczna|bibliotekach programistycznych]], [[Plik nagłówkowy|pliki nagłówkowe]] mogą mieć różne nazwy. Jednym sposobem rozwiązania tego problemu, jest pisanie kodu źródłowego z [[Instrukcja blokowa|instrukcjami blokowymi]] wybieranymi przez [[Preprocesor|dyrektywy preprocesora]] (<code>#ifdef</code>), jednak różnorodność narzędzi do [[Kompilacja (informatyka)|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 [[Wolne Oprogramowanie|wolnych]] i [[Otwarte Oprogramowanie|otwartych]] projektach. Narzędzia Autotools są wolnym oprogramowaniem na licencji [[GNU General Public Licence|GNU GPL]] ze szczególnymi wyjątkami<ref name="autoconf-except">[http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=blob;f=COPYING.EXCEPTION;h=469583528592cd69ac0847803b443849dcc9b1eb;hb=HEAD Autoconf license exception]</ref><ref name="libtool-hacking">[http://git.savannah.gnu.org/cgit/libtool.git/tree/HACKING?id=9c9cde2c95f3f04f48288e1911038249d5ac424b libtool HACKING]</ref>, zezwalającymi na wykorzystanie GNU build system w [[Zamknięte oprogramowanie|oprogramowaniu własnościowym]].
 
== Narzędzia wchodzące w skład GNU build system ==
[[Image:Autoconf-automake-process.svg|thumb|400px|Schemat proceduralny autoconf i automake]]
 
Autotools składa się z [[Autoconf]], [[Automake]] orazi [[Libtool]].<ref>http://autotoolset.sourceforge.net/tutorial.html#SEC40</ref> Inne narzędziaInnymi częstonarządziami używaneużywanymi z GNU Buildbuild Systemsystem to GNU [[Makemake]], [[GNU [[gettext]], [[pkg-config]] i [[GNU Compiler Collection]] (GCC).
 
== Narzędzia ==
Autotools składa się z [[Autoconf]], [[Automake]] oraz [[Libtool]]. Inne narzędzia często używane z GNU Build System to GNU [[Make]], [[GNU gettext]] i [[GNU Compiler Collection]].
=== GNU Autoconf ===
 
Autoconf na podstawie pliku configure.ac tworzy skrypt konfiguracyjny configure. Ten skrypt używając innych plików (np. Makefile.in) tworzy końcowy plik Makefile.
[[Autoconf]] generuje skrypt <code>[[configure]]</code> bazując na zawartości pliku <code>configure.ac</code>, który opisuje kod źródłowy. Uruchomiony skrypt <code>configure</code> skanuje środowisko kompilacji, a następnie generuje podrzędny skrypt <code>config.status</code>, który z kolei przetwarza pliki wejściowe, najczęściej <code>Makefile.in</code>, tworząc pliki wyjściowe (<code>Makefile</code>), które są właściwe dla danego środowiska kompilacji. Na koniec program <code>make</code> wykorzystując <code>Makefile</code> tworzy [[Plik wykonywalny|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ć <code>make</code>, który sponownie kompiluje część kodu źródłowego dotkniętego zmianą.
* Jeśli zmieniony został plik <code>.in</code>, należy ponownie uruchomić <code>config.status</code> i <code>make</code>.
* Jeśli kod źródłowy został skopiowany do innego komputera, należy ponownie uruchomić <code>configure</code> (który z kolei uruchamia <code>config.status</code> i <code>make</code>. (Z tego powodu kod źródłowy kompilowany za pomocą GNU build system jest rozpowszechniany bez plików generowanych przez <code>configure</code>.))
* Jeśli zostały przeprowadzone większe zmiany w kodzie źródłowym, potrzebne będą zmiany w plikach <code>.in</code> i <code>configure.ac</code>, a następnie wykonane kolejne kroki.
 
Aby przetworzyć pliki, autoconf wykorzystuje makroprocesor GNU [[M4 (informatyka)|m4]].
 
Autoconf jest dostarczany z kilkoma pomocnicznymi programami takimi jak:
* Autoheader, który pomaga zarządzać plikami nagłówkowymi.
* Autoscan, który wstępnie tworzy pliki wejściowe dla Autoconf.
* <code>ifnames</code>, który listuje identyfikatory preprocesora używane w programie.
 
=== GNU Automake ===
 
Automake tworzy plik Makefile.in na podstawie pliku Makefile.am. Makefile.in jest potem przekształcany przez skrypt configure w plik Makefile.
[[Automake]] pomaga tworzyć przenośne pliki <code>Makefile</code>, które następnie są przetwarzane przez program <code>make</code>. Jako dane wejściowe wykorzystywany jest plik <code>Makefile.am</code>, z którego tworzony jest plik <code>Makefile.in</code>, służący do wygenerowania <code>Makefile</code> za pomocą skryptu <code>configure</code>.
 
=== GNU Libtool ===
 
Libtool wspomaga tworzenie statycznych i dynamicznych bibliotek ukrywając różnice pomiędzy różnymi systemami operacyjnymi.
[[Libtool]] pomaga zarządzać tworzeniem [[Biblioteka statyczna|statycznych]] i [[Biblioteka dynamiczna|dynamicznych]] [[Biblioteka programistyczna|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 (system operacyjny)|Solaris]]).
 
=== Gnulib ===
 
[[Gnulib]] upraszcza proces tworzenia przenośnego oprogramowania dla wielu systemów, wykorzystującego w tym celu Autoconf i Automake.
 
== Zalety GNU build system ==
 
GNU build system pozwala [[Programista|programiście]] pisać [[Wieloplatformowość|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 <code>configure</code>, wymagający obecności tylko [[Powłoka systemowa|powłoki systemowej]] kompatybilnej z [[Powłoka Bourne'a|powłoką Bourne'a]].
 
== Ogranicznia GNU build system ==
 
GNU build system używa powłoki systemowej, kompatybilnej z powłoką Bourne'a, asystujac 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 [[Kompilacja skrośna|kompilacji skrośnej]], w celu tworzenia programów na inne [[Architektura komputera|architektury komputerowe]].<ref>http://sources.redhat.com/autobook/autobook/autobook_258.html</ref>
 
Oprogramowanie kompilowane skrośnie na systemie GNU/Linux lub innym z rodziny UNIX, do uruchomienia na systemie [[Windows]] jest również możliwe z wykorzystaniem [[MinGW]], jednak często pożądane są natywne kompilacje dla danych systemów (takich jak z rodziny systemów [[Microsoft Windows]]), które nie mogą standardowo uruchmiać skryptów powłok Bourne'a. Istnieje możliwość instalacji [[Cygwin]] albo [[MSYS]] w systemie Windows, tworząc warstwę kompatybilności z systemem uniksowym, przez co umożliwiając uruchomienie skryptu <code> configure</code>. [[Cygwin]] dostarcza ponadto [[GNU Compiler Collection]], [[make|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 [[GNU Compiler Collection|GCC]]).
 
Projekty używające GNU build system nie koniecznie muszą dostarczać skrypt <code>configure</code> w ich [[System kontroli wersji|systemach kontroli wersji]] (takich jak [[CVS]] czy [[Subversion]]). Jeśli projekt wykorzystujący GNU build system nie posiada wygenerowanego pliku <code>./configure</code> dostępnego dla użytkownika, musi on sam go wygenerować. Jednym z możliwych sposobów jest uruchomienie narzędzia <code>autoreconf</code> w powłoce systemowej:
 
$ autoreconf
 
Powyższe polecenie wyzwoli <code>aclocal</code>, <code>autoconf</code>, <code>autoheader</code> i <code>automake</code> jeśli będzie to potrzebne. W niektórych przypadkach więcej poleceń może być koniecznych. Popularną konwencją jest wówczas dostarczenie skrypu, często nazwanego <code>autogen.sh</code> lub <code>bootstrap</code>, który uruchamia wszystkie potrzebne narzędzia.
 
Pewnym ograniczeniem jest wygenerowany przec Autoconf skrypt <code>configure<code>, 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ż ==
 
*[[CMake]]
*[[GNU Coding Standards]]
 
{{Przypisy}}
 
== Linki zewnętrzne ==
*[http://airs.com/ian/configure/ The GNU configure and build system] {{lang|en}}
*The [http://www.freedesktop.org/software/pkgconfig/ pkg-config] package {{lang|en}}
*[http://sources.redhat.com/automake/automake.html automake manual] {{lang|en}}
*[http://www.gnu.org/software/automake/ Dokumentacja GNU automake] {{lang|en}}
*[http://www.gnu.org/software/autoconf/ Dokumentacja GNU autoconf] {{lang|en}}
*[http://www.lrde.epita.fr/~adl/autotools.html Autotools Tutorial] {{lang|en}}
*[http://sources.redhat.com/autobook/ GNU Autoconf, Automake, and Libtool] {{lang|en}}
*[http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool Autotools: a practitioner's guide to Autoconf, Automake and Libtool] {{lang|en}}
 
{{GNU}}