Blog literacki, portal erotyczny - seks i humor nie z tej ziemi
Strefa Linuksa
Strona główna |
Spis treści |
O autorze |
Księga gości |
Sonda |
Forum |
Reklama |
Kontakt |
Linki |
Jeśli zacząłeś pisać jakiś program dla Linuxa, na pewno trafiłeś na problem
zarządzania kodem źródłowym. Musisz za wszystko odpowiadać, nie ma żadnej
automatyzacji. W dodatku problematyczne są pliki nagłówkowe, gdyż gdy zmienisz
jeden z nich, zależne źródłą nie zostaną przekompilowane, a kompilator ten fakt
przemilczy... i powstaje program, który zakańcza swe działanie błędem
segmentacji. Problemem też jest dystybucja źródeł i dokumentacji. Czy tak musi
być? Nie! Wszystko dzięki wspaniałym programom autoconf i automake z projektu
GNU. Ale po kolei, bo się pogubimy.
Pakiety oprogramowania w GNU mają zazwyczaj strukturę głęboką, tzn. mają
wiele katalogów. Zaprezentuję tutaj typową strukturę - od takiej należy zacząć,
jeśli chce się tworzyć jakikolwiek program GNU. (za pomocą (auto) zaznaczyłem
elementy generowane automatycznie, zaś za pomocą (np) przykłady)
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- qualintaka.pev.pl
/doc - dokumentacja TexInfo, HTML i manuale
pakiet.1 - strona manuala
pakiet.info - strona GNU Info (auto)
pakiet.texi - źródła strony GNU Info
texinfo.tex - generator GNU Info
/include - pliki nagłówkowe
/intl - pakiet wielonarodościowy (auto)
/po - pliki z tłumaczeniami (auto)
ChangeLog - log zmian
pakiet.pot - matryca tłumaczeń (auto)
pl.gmo - skompilowane tłumaczenia polskie (auto,np)
pl.po - źródła tłumaczeń polskich (np)
potfiles - lista plików z komunikatami (auto)
potfiles.in - żródło powyższego
/src - źródła
ABOUT-NLS - o wielojęzykowości (auto)
AUTHORS - autorzy
ChangeLog - log zmian
COPYING - licencja
INSTALL - instrukcje instalacji
NEWS - nowości
README - o programie
TODO - lista rzeczy do zrobienia
linstall-sh - niezbędne!
Oprócz tego w każdym katalogu musi być plik Makefile.am, natomiast
w głównym config.in.
Oto przykładowy plik configure.in, wraz z tłumaczeniami (dla uproszczenia
pomijam i18n):
AC_INIT(README) > Inicjalizacja Autoconf (parametrem wybrany plik)
AM_CONFIG_HEADER(src/config.h) > Tworzenie nagłówka konfiguracji
AM_INIT_AUTOMAKE(projekt,wersja) > Ustalenie nazwy i wersji projektu
AC_ISC_POSIX > test na zgodność z posixem
AC_PROG_CC > sprawdzenie kompilatora C
AC_PROG_CXX > sprawdzenie kompilatora C++
AC_PROG_MAKE_SET > sprawdzenie make
AC_CHECK_PROG(AUTOCONF, autoconf, autoconf) > sprawdzenie autoconf'a
AC_CHECK_PROG(AUTOMAKE, automake, automake) > sprawdzenie automake'a
AC_CHECK_PROG(AUTOHEADER, autoheader, autoheader) > sprawdzenie autoheader'a
AC_CHECK_PROG(ACLOCAL, aclocal, aclocal) > sprawdzenie aclocal'a
AC_CHECK_PROG(LIBTOOL, libtool, libtool) > sprawdzenie libtool'a
AC_PROG_INSTALL > sprawdzenie install'a
AC_HEADER_STDC > sprawdzenie nagłówków C
AC_C_CONST > sprawdzenie, czy kompilator używa const
AC_C_INLINE > sprawdzenie, czy kompilator używa inline
AC_OUTPUT(Makefile src/Makefile) > wygenerowanie Makefile'ów
Następnie trzeba przygotować pliki Makefile.am. W głównym katalogu
wystarczy wiersz: SUBDIRS = src. Natomiast w katalogu src przykładowy
pliczek wygląda tak:
bin_PROGRAMS = program
program_SOURCES = main.c text.c xxx.c
program_LDADD = -lm
DEFS = -D__USE_GNU -D_GNU_SOURCE
Oczywiście, w tym pliku działa również SUBDIRS (jeśli trzeba podzielić
projekt na jeszcze więcej katalogów).
Wreszcie, należy w głównym katalogu (w którym powinny być pliki: AUTHORS,
COPYING, ChangeLog, INSTALL, Makefile.am, NEWS, README,
configure.in, install-sh, missing, mkinstalldirs (w tym ostatnie trzy należy
skopiować z /usr/share/automake)) należy wykonać po kolei:
autoconf
automake
./configure
I projekt gotowy jest do kompilacji poleceniem make.
Można się pobawić i18n: podpowiem, że trzeba w configure.in dodać do
SUBDIRS po oraz intl, dostawić ALL_LINGUAS="pl", AM_GNU_GETTEXT, a w
AC_OUTPUT dodać intl/Makefile po/Makefile.in po/Makefile. W katalogu
projektu należy wykonać gettextize, co utworzy katalogi intl i po.
W katalogu po należy do POTFILES.in dopisać wszystkie pliki z tłumaczeniami
(np. src/main.c). Ostatecznie, po wywołaniu autoconf, automake i make,
trzeba skopiować po/projekt.pot na po/pl.po. Szczegóły w dokumentacji.
System autoconf i automake nadaje się również do tworzenia
dokumentacji texinfo i man. Po szczegóły odsyłam do dokumentacji.
Strona testowana z Mozillą 0.9.1, Konquerorem, Lynxem, Linksem oraz IE 5.5.
w górę
Copyright © 2000-2001 Marek Materzok Wszelkie Prawa Zastrzeżone.