11.07.2015 Views

14× Vreckové počítače - Vitajte na stránkach www.einsty.hostujem.sk

14× Vreckové počítače - Vitajte na stránkach www.einsty.hostujem.sk

14× Vreckové počítače - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

P R O G R A M U J E M Eage – poèet udávajúci, ko¾ko predchádzajúcich verzií interface je kompatibilných s tým<strong>na</strong>jnovším. Toto èíslo nesmie by väèšie ako current. Keby bol current <strong>na</strong>príklad 5 a age 2,potom by sme s touto kninicou mohli spusti aj programy, ktoré boli linkované s inter−face 3, 4 aj 5.Tieto tri èísla musíme meni v podstate pri kadom release kninice a treba to robiopatrne a dôsledne. Staèí, ak si dobre uvedomíme, èo z<strong>na</strong>me<strong>na</strong>jú jednotlivé èísla, a ak sabudeme riadi <strong>na</strong>sledujúcimi pravidlami: Vdy, keï zmeníme zdrojové kódy kninice, inkrementujeme revision. Teda ideo novú revíziu aktuálneho interface (došlo iba k interným zmenám). Ak zmeníme interface (<strong>na</strong>príklad pridáme argument do <strong>na</strong>šej funkcie hello()),inkrementujeme current a revision <strong>na</strong>stavíme <strong>na</strong> nulu. Ide o prvú revíziu novéhointerface. Ak je nový interface rozšírením predchádzajúceho, ale všetky funkciez predchádzajúceho interface ostali nezmenené (èo sa týka interface, nieimplementácie), inkrementujeme aj age. Nový interface je spätne kompatibilný s týmpredchádzajúcim. Ak v novom interface odstránime funkciu, ktorá sa <strong>na</strong>chádzala v predchádzajúcominterface, porušíme tým spätnú kompatibilitu a age musíme vynulova. Teda mámenový, ale spätne nekompatibilný interface.Prvý release vôbec má oz<strong>na</strong>èenie 0:0:0. Tu je súbor hello.h:#include 3void hello(char* <strong>na</strong>me);A tu je hello.c:#include void hello(char* <strong>na</strong>me){printf("hello, %s", <strong>na</strong>me);}Funkcia síce robí to, èo má, ale v záujme estetickosti výpisu <strong>na</strong> koniec vypisovanéhoreazca pridáme z<strong>na</strong>k prechodu <strong>na</strong> nový riadok \n. Bohuia¾, absenciu tohto z<strong>na</strong>ku sme sivšimli a po prvom release. Jeho pridanie je z nášho poh¾adu dos dôleitá udalos <strong>na</strong> to,aby sme spravili nový release ☺. Inkrementujeme teda revision a dostaneme oz<strong>na</strong>èenieverzie: 0:1:0. Medzitým, samozrejme, zmeníme aj súbor configure.in, ktorý vyzerá takto:dnl Process this file with autoconf to produce a configure script.AC_INIT(src/Makefile.am)AM_INIT_AUTOMAKE(hello, 2.0)AC_PREFIX_DEFAULT(/usr/local)AM_CONFIG_HEADER(config.h)AC_PROG_INSTALLAC_PROG_LN_SAM_PROG_LIBTOOLAC_OUTPUT(Makefile src/Makefile test/Makefile doc/Makefile)Zme<strong>na</strong> sa týka druhého riadka, ktorý definuje názov balíka a jeho verziu. To, ako bude−me meni tento riadok, je iba <strong>na</strong> nás. Záleí to <strong>na</strong> mnohých veciach; okrem iných aj <strong>na</strong>tom, èi sme sa rozhodli pouíva dve, tri alebo štyri èísla. Ako sme si u povedali, nemáto <strong>na</strong> oz<strong>na</strong>èovanie verzií, ktoré pouíva libtool, nijaký vplyv.Ne<strong>sk</strong>ôr sme sa rozhodli znovu zlepši <strong>na</strong>šu kninicu a znovu to bola iba interná zme<strong>na</strong>(Èo sa dá <strong>na</strong> takej funkcii meni? U ma niè ne<strong>na</strong>padá ☺), a tak sme sa dopracovali k ver−zii 0:2:0. Potom sme pridali funkciu hi(), take tu je hello.h:#include void hello(char*);void hi(char*);Nasleduje hello.c:#include void hello(char* <strong>na</strong>me){printf("Hello, %s!\n", <strong>na</strong>me);}void hi(char* <strong>na</strong>me){printf("Hi, %s!\n", <strong>na</strong>me);}Pridanie novej funkcie však nijako neovplyvnilo funkènos funkcie hello() – nový inter−face je spätne kompatibilný s tým predchádzajúcim. Preto vynulujeme revision (mámenový interface) a inkrementujeme current a age (pre neporušenú kompatibilitu). Takedostávame verziu 1:0:1. Ne<strong>sk</strong>ôr sme sa však rozhodli prida prvej funkcii parameter type,od ktorého závisí, ako bude vyzera výsledný pozdrav. Take <strong>na</strong>jprv hello.h:#include void hello(char*, int);void hi(char*);A teraz hello.c:#includevoid hello(char* <strong>na</strong>me, int type){if (type == 1)printf("hello, %s\n", <strong>na</strong>me);else if (type == 2)printf("hello, %s!\n", <strong>na</strong>me);else if (type == 3)printf("Hello, %s\n", <strong>na</strong>me);elseprintf("Hello, %s!\n", <strong>na</strong>me);}void hi(char* <strong>na</strong>me){printf("Hi, %s!\n", <strong>na</strong>me);}Sami vidíte, e funkciu hello() musíme vola trošku ináè, a preto sme dostali nekom−patibilnú verziu. Vynulujeme teda age a revision a inkrementujeme current – dostali smesa k verzii 2:0:0, ktorú, bohuia¾, u nemôeme poui pre programy, ktoré pouívalipredchádzajúce verzie <strong>na</strong>šej kninice. Ukáme si ešte výsledný Makefile.am:## Process this file with automake to produce Makefile.inlib_LTLIBRARIES = libhello.lalibhello_la_SOURCES = hello.clibhello_la_LDFLAGS = −version−info 2:0:0include_HEADERS = hello.hDISTCLEANFILES = ./.deps/* ./.deps/.PPri zmene interface neh¾adíme iba <strong>na</strong> to, èi sme zmenili API (teda tých pár funkcií, ktorémôe pouíva nejaký program vyuívajúci <strong>na</strong>šu kninicu). Musíme si <strong>sk</strong>ontrolova aj to,èi sme nezmenili nejaký formát súboru, sieový protokol, a všetko, s èím <strong>na</strong>ša kninicapracuje (samozrejme, teraz nemám <strong>na</strong> mysli kninicu hello ☺).Na záver tejto témy si ešte uvedieme príklad súèasného pouitia parametrov −version−info a −release. Predstavte si, e vaša kninica sa utešene rozrastá a dostala sa do štádia,keï by ju bolo dobré rozdeli <strong>na</strong> stabilnú a nestabilnú verziu. Vy však nechcete, aby sipouívatelia museli svoje programy prelinkova s vašou kninicou vdy, keï vydáte novýrelease. V tomto prípade pouijeme −release <strong>na</strong> oz<strong>na</strong>èenie verzie priamo v názve súborukninice. Pre prvý release stabilnej vývojovej vetvy pouijeme −release 1.0, pre nestabilnúvetvu to bude −release 1.1. Takto si zároveò zabezpeèíte binárnu nekompatibilitu medzitýmito vetvami a pouívatelia si nebudú môc vy<strong>sk</strong>úša kombinova <strong>na</strong>príklad programzaloený <strong>na</strong> stabilnej verzii kninice s nestabilnou kninicou a <strong>na</strong>opak a nespôsobia simoný pád programu.CFLAGS. Na zaèiatku tejto èasti sme spomí<strong>na</strong>li parametre programu libtool, ktoré sapouijú v móde linkovania. Takisto sme spomenuli, e existuje viacero iných módov. Násteraz bude zaujíma kompilovací mód. Všetko, èo priradíme premennej ..._la_LDFLAGS, sapouije ako parameter pri linkovaní. Predstavte si však, e by ste chceli odovzda nejaképarametre kompilátoru, a nie linkeru. Na to pouijeme premennú CFLAGS, tentoraz tobude bez akéhoko¾vek prefixu, pretoe táto premenná je spoloèná pre všetky súbory aprogramy, ktoré má daný súbor Makefile.am.Všetky parametre, ktoré môeme v kompilovacom móde programu libtool poui, sizobrazíme spustením libtool −−help −−mode=compile. Nie je ich a tak ve¾a (dva), zaujímavýje dokonca iba jeden z nich: −static. Tento parameter „presvedèí“ libtool, aby vytvoril ibastatickú kninicu – štandardne sa toti vytvára statická aj dy<strong>na</strong>mická kninica. O rozdie−loch medzi nimi sme si u èo−to povedali minule. Teraz si dáme dokopy to, èo sme sadozvedeli v predchádzajúcom aj tomto odseku, a vytvoríme nový súbor Makefile.am, ktorýnám vytvorí iba statickú kninicu, ktorú <strong>na</strong>vyše optimalizuje prepí<strong>na</strong>èom prekladaèa −O3.## Process this file with automake to produce Makefile.inlib_LTLIBRARIES = libhello.lalibhello_la_SOURCES = hello.clibhello_la_LDFLAGS = −version−info 2:0:0CFLAGS = −O3 −staticinclude_HEADERS = hello.hDISTCLEANFILES = ./.deps/* ./.deps/.PA týmto by sme <strong>sk</strong>onèili ïalšie pokraèovanie nášho seriálu o programoch z rodinky Auto−tools. Teším sa <strong>na</strong> ïalšie stretnutie!Oto Komiòák12/2002 PC REVUE 163

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!