20.5.2004

O DOKUMENTACI, SEMESTR?LKA Z C++ A N?CO O MAKEFILE

Filed under: school,SW — nax @ 20:51

O v?kendu jsem se konečn? pustil do svoj? semestr??lky na p??edm?t Programovac? jazyk C++. Na zač??tku semestru jsme dostali relativn? volnou ruku co se t?matu t??če (pouze minim??ln? n??roky na to, jak? konstrukce se tam mus? objevit – polymorfizmus, v??jimky…) a tak jsem si v r??mci t?to pr??ce vytyčil za ??kol napsat d?mona, kter?? bude na pozad? monitorovat linku b???c? na Ronje (pomoc? pingu, nejl?pe ronjapingu, kter?? je obohacen o algoritmus v??počtu s?ly sign??lu) a z??rove?? si bude stahovat informace o aktu??ln?m počas? z internetu, aby ve v??sledku ??lo z t?chto statistik kreslit grafy a to tak aby bylo vid?t, p??i jak??ch sv?teln??ch podm?nk??ch ta linka nejela a kdy ano.

V dokumentaci k programu vlna od česk?ho guru typografick?ho syst?mu TeX (vlna slou?? k dopln?n? netisknuteln??ch mezer do zdroj??ku texov?ho dokumentu) jsem se dočetl, ?e Petr Ol????k v?dy nejd???v nap???e dokumentaci k tomu co se chyst?? napsat a pak a? to m?? ????dn? promy??leno, tak teprve nap???e ten program. On vlastn? i s??m program TeX je naps??n stejn??m zp??sobem. Kdy? ho pan D. Knuth (to jm?no je dost často sly??et v hodin??ch teoretick? informatiky a pak hlavn? v teorii jazyk?? a p??eklad??) tvo??il, tak si nejd???v vymyslel vlastn? jazyk zvan?? web (ve kter?m je naps??na i v????e zm?n?n?? vlna) a tam se programuje vlastn? tak, ?e p????ete dokumentaci i k??d z??rove?? (tedy kdy? na zdroj??k TeXu pust?te tex, tak v??m vypadne kompletn? dokumentace – specifikace – programu TeX).

Mo?n?? i to je d??vod, ?e TeX je t?m??? dokonal?? program a Knuth mohl ud?lat to, ?e n?kdy okolo roku 90 prohl??sil TeX za hotov?? a od t? doby tak jednou za 2 roky koukne na bugreporty zjist?, kter? z nahl????en??ch chov??n? neodpov?daj? dokumentaci a to a jen to pak začlen? jako opravu (tedy nikdy u? nebude do TeXu p??id??na nov?? funkce). Pro člov?ka odkojen?ho komerčn?mi společnostmi, kter? mu ka?d?? p??l rok serv?ruj? za drah?? pen?z nejlep??? a nejnov?j??? verzi, kterou prost? pot??ebuje to p??ijde pon?kud divn?. Nicm?n? obrovsk?? v??hoda tohoto p???stupu je v tom, ?e pokud jste n?jak?? dokument napsali v roce 91 v TeXu, tak po p??elo?en? jste dostali naprosto stejn?? dokument, jak?? dostanete dne??n? aktu??ln? verz?. Mimochodem, verze TeXu je po zmra?en? k??du 3 a s ka?dou objevenou chybou pan Knuth p??id?? za desetinou č??rku jednu cifru z ludolfova č?sla. Aktu??ln? verze TeXu na m?m stable debianu je 3.14159 (tedy zat?m 5 zkutečn??ch chyb bylo reportov??no a opraveno). A rozhodn? to nen? t?m, ?e by tex byl m??lo pou??v??n.

TeX je tedy n??dhern?? p???klad jak d??le?it? je nejd???v p??em????let a potom programovat. Mimochodem to co se cel?? tento semestr uč?m v p??edm?tu softwarov? in?en??rstv?, je vlastn? p??esn? tohle. Nejd???v je pot??eba ud?lat analytickou dokumentaci projektu a pak na z??klad? t?chto dokument?? se to implementuje do k??du. No a tak kdy? jsem cht?l zač?t s programov??n?m, tak jsem si vzpomn?l na tu v?tu od Ol????ka a začal jsem p??em????let nad datov??m modelem. Vlastn? kdy? u? jsem se tu zm?nil o SI, tak tam jsme se učili UML neboli Unified Modeling Language, co? je mimo jin? jazyk, kter??m se daj? popsat i v diagramu z??vislosti mezi objekty. No a kdy? mluv?me o diagramu, tak na to pou?iji program dia o kter? jsem tady na blogu u? psal.

No lopotil jsem se s t?m cel?? v?kend. Abych byl up???mn??, tak dia nen? zrovna program se kter??m by se člov?ku pracovalo hodn? jednodu??e, ale um? to to UML a po chv?li u? jsem ty objekty zvl??dal d?lat a d?dit. Jen mne docela iritovalo, ?e default velikost vkl??dan??ch symbol?? je d?sn? velk?? a nena??el jsem kde by se to dalo n?jak ovlivnit (krom? p??i ka?d?m vkl??d??n? zm?nit velikosti v??ech p?sem pro dan?? objekt). No a kdy? jsem m?l z??kladn? n??črt hotov?? tak jsem pou?il program Dia2Code, kter?? z ulo?en?ho XML souboru vygeneruje cpp a h soubory (samoz??ejm? jen vlo?en? deklarace – z??zraky zase nečekejte). Akor??t jsem nepochopil proč tam nevlo?il i ty koment????e kter? jsem tam k tomu tak pracn? vkl??dal.

No a teď jsem ve f??zi implementace. A ??ekl jsem si, ?e by nebylo ??patn? vyu??t s?ly programu make. V jednom cvičen? z p??edm?tu OSY jsou hezky jeho v??hody popsan?. Ve zkratce jsem pot??eboval takov?? Makefile, aby se v?dy p??ekl??daly jen soubory, kter? jsem od minul?ho p??ekladu zm?nil. Napsal jsem si tedy Makefile, kde je v?dy pops??n zvl?????? p??eklad skupiny soubor??, kter? implementuj? v?dy jeden cpp soubor.

M?l jsem ale probl?m p??i p??ekladu. Hl??silo to tohle:

g++ -Wall -g -o wd runcommand.o
/usr/lib/crt1.o: In function `_start’:
/usr/lib/crt1.o(.text+0x18): undefined reference to `main’
collect2: ld returned 1 exit status
make: *** [all] Error 1

Myslel jsem si, ?e jsem n?co ??patn? ud?lal v tom Makefilu a tak jsem zjistil t??eba to, ?e parametr -c u g++ (gcc) znamen?? aby to jen zkompiloval a u? to nelinkoval, ale t?m se jen probl?m p??esunul do chv?le kde se v č??sti all sestavovala kompletn? bin??rka. Ale nakonec byl probl?m p??esn? v tom, co to hl??silo – toti? v tom, ?e p??i pokusu sestavit tu konečnou bin??rku nem?? k dispozici ???dnou funkci main a tedy by program nem?l kde zač?t.

Sakra to sem se zase d?sn? rozkecal. U? bych m?l zač?t konečn? implementovat. Od p?????t? bych ty posty m?l ps??t o hodn? krat???. T??eba v?dy jen odstaveček nebo tak. Tohle stejn? asi nikdo č?st nebude 😉

Comments are closed.

Powered by WordPress