{"id":101,"date":"2004-05-20T20:51:05","date_gmt":"2004-05-20T20:51:05","guid":{"rendered":"https:\/\/143-42-55-146.ip.linodeusercontent.com\/?p=101"},"modified":"2004-05-20T20:51:05","modified_gmt":"2004-05-20T20:51:05","slug":"o-dokumentaci-semestralka-z-c-a-neco-o-makefile","status":"publish","type":"post","link":"https:\/\/nax.cz\/?p=101","title":{"rendered":"O DOKUMENTACI, SEMESTR\u0102\u0081LKA Z C++ A N\u00c4\u009aCO O MAKEFILE"},"content":{"rendered":"<p>O v\u0102\u00adkendu jsem se kone\u00c4\u008dn\u00c4\u009b pustil do svoj\u0102\u00ad semestr\u0102\u0104lky na p\u0139\u0099edm\u00c4\u009bt <a href=\"http:\/\/service.felk.cvut.cz\/courses\/36CPP\/\">Programovac\u0102\u00ad jazyk C++<\/a>. Na za\u00c4\u008d\u0102\u0104tku semestru jsme dostali relativn\u00c4\u009b volnou ruku co se t\u0102\u0160matu t\u0102\u02dd\u00c4\u008de (pouze minim\u0102\u0104ln\u0102\u00ad n\u0102\u0104roky na to, jak\u0102\u0160 konstrukce se tam mus\u0102\u00ad objevit &#8211; polymorfizmus, v\u0102\u02ddjimky&#8230;) a tak jsem si v r\u0102\u0104mci t\u0102\u0160to pr\u0102\u0104ce vyty\u00c4\u008dil za \u0102\u015fkol napsat d\u0102\u0160mona, kter\u0102\u02dd bude na pozad\u0102\u00ad monitorovat linku b\u00c4\u009b\u0139\u017e\u0102\u00adc\u0102\u00ad na Ronje (pomoc\u0102\u00ad pingu, nejl\u0102\u0160pe ronjapingu, kter\u0102\u02dd je obohacen o algoritmus v\u0102\u02ddpo\u00c4\u008dtu s\u0102\u00adly sign\u0102\u0104lu) a z\u0102\u0104rove\u0139\u0088 si bude stahovat informace o aktu\u0102\u0104ln\u0102\u00adm po\u00c4\u008das\u0102\u00ad z internetu, aby ve v\u0102\u02ddsledku \u0139\u0104lo z t\u00c4\u009bchto statistik kreslit grafy a to tak aby bylo vid\u00c4\u009bt, p\u0139\u0099i jak\u0102\u02ddch sv\u00c4\u009bteln\u0102\u02ddch podm\u0102\u00adnk\u0102\u0104ch ta linka nejela a kdy ano.<\/p>\n<p>V dokumentaci k programu <a href=\"ftp:\/\/math.feld.cvut.cz\/pub\/olsak\/vlna\/\">vlna<\/a> od \u00c4\u008desk\u0102\u0160ho guru typografick\u0102\u0160ho syst\u0102\u0160mu TeX (vlna slou\u0139\u017e\u0102\u00ad k dopln\u00c4\u009bn\u0102\u00ad netisknuteln\u0102\u02ddch mezer do zdroj\u0102\u0104ku texov\u0102\u0160ho dokumentu) jsem se do\u00c4\u008detl, \u0139\u017ee Petr Ol\u0139\u0104\u0102\u0104k v\u0139\u017edy nejd\u0139\u0099\u0102\u00adv nap\u0102\u00ad\u0139\u0104e dokumentaci k tomu co se chyst\u0102\u0104 napsat a pak a\u0139\u017e to m\u0102\u0104 \u0139\u0099\u0102\u0104dn\u00c4\u009b promy\u0139\u0104leno, tak teprve nap\u0102\u00ad\u0139\u0104e ten program. On vlastn\u00c4\u009b i s\u0102\u0104m program TeX je naps\u0102\u0104n stejn\u0102\u02ddm zp\u0139\u017bsobem. Kdy\u0139\u017e ho pan D. Knuth (to jm\u0102\u0160no je dost \u00c4\u008dasto sly\u0139\u0104et v hodin\u0102\u0104ch teoretick\u0102\u0160 informatiky a pak hlavn\u00c4\u009b v teorii jazyk\u0139\u017b a p\u0139\u0099eklad\u0139\u017b) tvo\u0139\u0099il, tak si nejd\u0139\u0099\u0102\u00adv vymyslel vlastn\u0102\u00ad jazyk zvan\u0102\u02dd web (ve kter\u0102\u0160m je <a href=\"ftp:\/\/math.feld.cvut.cz\/pub\/olsak\/vlna\/vlna.w\">naps\u0102\u0104na <\/a> i v\u0102\u02dd\u0139\u0104e zm\u0102\u00adn\u00c4\u009bn\u0102\u0104 vlna) a tam se programuje vlastn\u00c4\u009b tak, \u0139\u017ee p\u0102\u0104\u0139\u0104ete dokumentaci i k\u0102\u0142d z\u0102\u0104rove\u0139\u0088 (tedy kdy\u0139\u017e na zdroj\u0102\u0104k TeXu pust\u0102\u00adte tex, tak v\u0102\u0104m vypadne kompletn\u0102\u00ad dokumentace &#8211; specifikace &#8211; programu TeX).<\/p>\n<p>Mo\u0139\u017en\u0102\u0104 i to je d\u0139\u017bvod, \u0139\u017ee TeX je t\u0102\u0160m\u00c4\u009b\u0139\u0099 dokonal\u0102\u02dd program a Knuth mohl ud\u00c4\u009blat to, \u0139\u017ee n\u00c4\u009bkdy okolo roku 90 prohl\u0102\u0104sil TeX za hotov\u0102\u02dd a od t\u0102\u0160 doby tak jednou za 2 roky koukne na bugreporty zjist\u0102\u00ad, kter\u0102\u0160 z nahl\u0102\u0104\u0139\u0104en\u0102\u02ddch chov\u0102\u0104n\u0102\u00ad neodpov\u0102\u00addaj\u0102\u00ad dokumentaci a to a jen to pak za\u00c4\u008dlen\u0102\u00ad jako opravu (tedy nikdy u\u0139\u017e nebude do TeXu p\u0139\u0099id\u0102\u0104na nov\u0102\u0104 funkce). Pro \u00c4\u008dlov\u00c4\u009bka odkojen\u0102\u0160ho komer\u00c4\u008dn\u0102\u00admi spole\u00c4\u008dnostmi, kter\u0102\u0160 mu ka\u0139\u017ed\u0102\u02dd p\u0139\u017bl rok serv\u0102\u00adruj\u0102\u00ad za drah\u0102\u02dd pen\u0102\u00adz nejlep\u0139\u0104\u0102\u00ad a nejnov\u00c4\u009bj\u0139\u0104\u0102\u00ad verzi, kterou prost\u00c4\u009b pot\u0139\u0099ebuje to p\u0139\u0099ijde pon\u00c4\u009bkud divn\u0102\u0160. Nicm\u0102\u0160n\u00c4\u009b obrovsk\u0102\u0104 v\u0102\u02ddhoda tohoto p\u0139\u0099\u0102\u00adstupu je v tom, \u0139\u017ee pokud jste n\u00c4\u009bjak\u0102\u02dd dokument napsali v roce 91 v TeXu, tak po p\u0139\u0099elo\u0139\u017een\u0102\u00ad jste dostali naprosto stejn\u0102\u02dd dokument, jak\u0102\u02dd dostanete dne\u0139\u0104n\u0102\u00ad aktu\u0102\u0104ln\u0102\u00ad verz\u0102\u00ad. Mimochodem, verze TeXu je po zmra\u0139\u017een\u0102\u00ad k\u0102\u0142du 3 a s ka\u0139\u017edou objevenou chybou pan Knuth p\u0139\u0099id\u0102\u0104 za desetinou \u00c4\u008d\u0102\u0104rku jednu cifru z ludolfova \u00c4\u008d\u0102\u00adsla. Aktu\u0102\u0104ln\u0102\u00ad verze TeXu na m\u0102\u0160m stable debianu je 3.14159 (tedy zat\u0102\u00adm 5 zkute\u00c4\u008dn\u0102\u02ddch chyb bylo reportov\u0102\u0104no a opraveno). A rozhodn\u00c4\u009b to nen\u0102\u00ad t\u0102\u00adm, \u0139\u017ee by tex byl m\u0102\u0104lo pou\u0139\u017e\u0102\u00adv\u0102\u0104n.<\/p>\n<p>TeX je tedy n\u0102\u0104dhern\u0102\u02dd p\u0139\u0099\u0102\u00adklad jak d\u0139\u017ble\u0139\u017eit\u0102\u0160 je nejd\u0139\u0099\u0102\u00adv p\u0139\u0099em\u0102\u02dd\u0139\u0104let a potom programovat. Mimochodem to co se cel\u0102\u02dd tento semestr u\u00c4\u008d\u0102\u00adm v p\u0139\u0099edm\u00c4\u009btu softwarov\u0102\u0160 in\u0139\u017een\u0102\u02ddrstv\u0102\u00ad, je vlastn\u00c4\u009b p\u0139\u0099esn\u00c4\u009b tohle. Nejd\u0139\u0099\u0102\u00adv je pot\u0139\u0099eba ud\u00c4\u009blat analytickou dokumentaci projektu a pak na z\u0102\u0104klad\u00c4\u009b t\u00c4\u009bchto dokument\u0139\u017b se to implementuje do k\u0102\u0142du. No a tak kdy\u0139\u017e jsem cht\u00c4\u009bl za\u00c4\u008d\u0102\u00adt s programov\u0102\u0104n\u0102\u00adm, tak jsem si vzpomn\u00c4\u009bl na tu v\u00c4\u009btu od Ol\u0139\u0104\u0102\u0104ka a za\u00c4\u008dal jsem p\u0139\u0099em\u0102\u02dd\u0139\u0104let nad datov\u0102\u02ddm modelem. Vlastn\u00c4\u009b kdy\u0139\u017e u\u0139\u017e jsem se tu zm\u0102\u00adnil o SI, tak tam jsme se u\u00c4\u008dili UML neboli <a href=\"http:\/\/www.uml.org\/\">Unified Modeling Language<\/a>, co\u0139\u017e je mimo jin\u0102\u0160 jazyk, kter\u0102\u02ddm se daj\u0102\u00ad popsat i v diagramu z\u0102\u0104vislosti mezi objekty. No a kdy\u0139\u017e mluv\u0102\u00adme o diagramu, tak na to pou\u0139\u017eiji program <a href=\"http:\/\/www.lysator.liu.se\/~alla\/dia\/\">dia<\/a> o kter\u0102\u0160 jsem <a href=\"http:\/\/nax.hn.org\/nblog\/index.php?begin=23http:\/\/nax.hn.org\/nblog\/index.php?begin=23\">tady na blogu u\u0139\u017e psal<\/a>.<\/p>\n<p>No lopotil jsem se s t\u0102\u00adm cel\u0102\u02dd v\u0102\u00adkend. Abych byl up\u0139\u0099\u0102\u00admn\u0102\u02dd, tak dia nen\u0102\u00ad zrovna program se kter\u0102\u02ddm by se \u00c4\u008dlov\u00c4\u009bku pracovalo hodn\u00c4\u009b jednodu\u0139\u0104e, ale um\u0102\u00ad to to <a href=\"http:\/\/www.gnome.org\/projects\/dia\/umltut\/index.html\">UML<\/a> a po chv\u0102\u00adli u\u0139\u017e jsem ty objekty zvl\u0102\u0104dal d\u00c4\u009blat a d\u00c4\u009bdit. Jen mne docela iritovalo, \u0139\u017ee default velikost vkl\u0102\u0104dan\u0102\u02ddch symbol\u0139\u017b je d\u00c4\u009bsn\u00c4\u009b velk\u0102\u0104 a nena\u0139\u0104el jsem kde by se to dalo n\u00c4\u009bjak ovlivnit (krom\u00c4\u009b p\u0139\u0099i ka\u0139\u017ed\u0102\u0160m vkl\u0102\u0104d\u0102\u0104n\u0102\u00ad zm\u00c4\u009bnit velikosti v\u0139\u0104ech p\u0102\u00adsem pro dan\u0102\u02dd objekt). No a kdy\u0139\u017e jsem m\u00c4\u009bl z\u0102\u0104kladn\u0102\u00ad n\u0102\u0104\u00c4\u008drt hotov\u0102\u02dd tak jsem pou\u0139\u017eil program <a href=\"http:\/\/dia2code.sourceforge.net\/\">Dia2Code<\/a>, kter\u0102\u02dd z ulo\u0139\u017een\u0102\u0160ho XML souboru vygeneruje cpp a h soubory (samoz\u0139\u0099ejm\u00c4\u009b jen vlo\u0139\u017een\u0102\u0160 deklarace &#8211; z\u0102\u0104zraky zase ne\u00c4\u008dekejte). Akor\u0102\u0104t jsem nepochopil pro\u00c4\u008d tam nevlo\u0139\u017eil i ty koment\u0102\u0104\u0139\u0099e kter\u0102\u0160 jsem tam k tomu tak pracn\u00c4\u009b vkl\u0102\u0104dal.<\/p>\n<p>No a te\u00c4\u008f jsem ve f\u0102\u0104zi implementace. A \u0139\u0099ekl jsem si, \u0139\u017ee by nebylo \u0139\u0104patn\u0102\u0160 vyu\u0139\u017e\u0102\u00adt s\u0102\u00adly programu make. V jednom <a href=\"http:\/\/unix.felk.cvut.cz\/osy\/cviceni\/c5.html#Make\">cvi\u00c4\u008den\u0102\u00ad z p\u0139\u0099edm\u00c4\u009btu OSY<\/a> jsou hezky jeho v\u0102\u02ddhody popsan\u0102\u0160. Ve zkratce jsem pot\u0139\u0099eboval takov\u0102\u02dd Makefile, aby se v\u0139\u017edy p\u0139\u0099ekl\u0102\u0104daly jen soubory, kter\u0102\u0160 jsem od minul\u0102\u0160ho p\u0139\u0099ekladu zm\u00c4\u009bnil. Napsal jsem si tedy <a href=\"http:\/\/nax.hn.org\/pub\/skola\/sem6\/cpp\/Makefile\">Makefile<\/a>, kde je v\u0139\u017edy pops\u0102\u0104n zvl\u0102\u0104\u0139\u0104\u0139\u013d p\u0139\u0099eklad skupiny soubor\u0139\u017b, kter\u0102\u0160 implementuj\u0102\u00ad v\u0139\u017edy jeden cpp soubor.<\/p>\n<p>M\u00c4\u009bl jsem ale probl\u0102\u0160m p\u0139\u0099i p\u0139\u0099ekladu. Hl\u0102\u0104silo to tohle:<\/p>\n<p><strong>g++ -Wall -g -o wd runcommand.o <\/strong><br \/>\n<strong>\/usr\/lib\/crt1.o: In function `_start&#8216;:<\/strong><br \/>\n<strong>\/usr\/lib\/crt1.o(.text+0x18): undefined reference to `main&#8216;<\/strong><br \/>\n<strong>collect2: ld returned 1 exit status<\/strong><br \/>\n<strong>make: *** [all] Error 1<\/strong><\/p>\n<p>Myslel jsem si, \u0139\u017ee jsem n\u00c4\u009bco \u0139\u0104patn\u00c4\u009b ud\u00c4\u009blal v tom Makefilu a tak jsem zjistil t\u0139\u0099eba to, \u0139\u017ee parametr -c u g++ (gcc) znamen\u0102\u0104 aby to jen zkompiloval a u\u0139\u017e to nelinkoval, ale t\u0102\u00adm se jen probl\u0102\u0160m p\u0139\u0099esunul do chv\u0102\u00adle kde se v \u00c4\u008d\u0102\u0104sti all sestavovala kompletn\u0102\u00ad bin\u0102\u0104rka. Ale nakonec byl probl\u0102\u0160m p\u0139\u0099esn\u00c4\u009b v tom, co to hl\u0102\u0104silo &#8211; toti\u0139\u017e v tom, \u0139\u017ee p\u0139\u0099i pokusu sestavit tu kone\u00c4\u008dnou bin\u0102\u0104rku nem\u0102\u0104 k dispozici \u0139\u017e\u0102\u0104dnou funkci main a tedy by program nem\u00c4\u009bl kde za\u00c4\u008d\u0102\u00adt.<\/p>\n<p>Sakra to sem se zase d\u00c4\u009bsn\u00c4\u009b rozkecal. U\u0139\u017e bych m\u00c4\u009bl za\u00c4\u008d\u0102\u00adt kone\u00c4\u008dn\u00c4\u009b implementovat. Od p\u0139\u0099\u0102\u00ad\u0139\u0104t\u00c4\u009b bych ty posty m\u00c4\u009bl ps\u0102\u0104t o hodn\u00c4\u009b krat\u0139\u0104\u0102\u00ad. T\u0139\u0099eba v\u0139\u017edy jen odstave\u00c4\u008dek nebo tak. Tohle stejn\u00c4\u009b asi nikdo \u00c4\u008d\u0102\u00adst nebude \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O v\u0102\u00adkendu jsem se kone\u00c4\u008dn\u00c4\u009b pustil do svoj\u0102\u00ad semestr\u0102\u0104lky na p\u0139\u0099edm\u00c4\u009bt Programovac\u0102\u00ad jazyk C++. Na za\u00c4\u008d\u0102\u0104tku semestru jsme dostali relativn\u00c4\u009b volnou ruku co se t\u0102\u0160matu t\u0102\u02dd\u00c4\u008de (pouze minim\u0102\u0104ln\u0102\u00ad n\u0102\u0104roky na to, jak\u0102\u0160 konstrukce se tam mus\u0102\u00ad objevit &#8211; polymorfizmus, v\u0102\u02ddjimky&#8230;) a tak jsem si v r\u0102\u0104mci t\u0102\u0160to pr\u0102\u0104ce vyty\u00c4\u008dil za \u0102\u015fkol napsat d\u0102\u0160mona, kter\u0102\u02dd bude [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,16],"tags":[],"class_list":["post-101","post","type-post","status-publish","format-standard","hentry","category-skola","category-sw"],"_links":{"self":[{"href":"https:\/\/nax.cz\/index.php?rest_route=\/wp\/v2\/posts\/101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nax.cz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nax.cz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nax.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nax.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=101"}],"version-history":[{"count":0,"href":"https:\/\/nax.cz\/index.php?rest_route=\/wp\/v2\/posts\/101\/revisions"}],"wp:attachment":[{"href":"https:\/\/nax.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nax.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nax.cz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}