10.07.2015 Views

2× DVD - Vitajte na stránkach www.einsty.hostujem.sk

2× DVD - Vitajte na stránkach www.einsty.hostujem.sk

2× DVD - 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 EN O V Ý S E R I Á LAuto tools / 1. èas<strong>Vitajte</strong> pri novom seriáli pre programátorov, pri ktorom sa budeme pravidelne stretáva vnieko¾kých <strong>na</strong>jbliších èíslach PC REVUE. Ako u názov <strong>na</strong>povedá, bude o programe Makea súboroch Makefile. Po tom, èo si toto všetko preberieme, sa pustíme do programovAutomake, Autoconf, configure a ostatných, ktoré vám u¾ahèia ivot.ÈO JE TO MAKE? Make je program, bez ktorého si programátori (hlavne tí, ktoríprogramujú v C, C++ a iných jazykoch, ktorých kompilátory sa dajú spusti ako príkazyshell) nevedia predstavi ivot (programátor<strong>sk</strong>ý, pochopite¾ne :−). Ak pracujete <strong>na</strong> neja−kom (èo i len trochu väèšom) projekte, pravdepodobne je zloený z viacerých súborov.Ak v niektorom z nich urobíte zmenu, musíte dotyèný súbor prekompilova a potom zlin−kova s ostatnými <strong>sk</strong>ompilovanými súbormi do výsledného programu. Ak však urobítezmeny vo viacerých súboroch <strong>na</strong>raz, musíte si zapamäta, v ktorých súboroch ste zmenyurobili. Ešte väèší zmätok urobia závislosti súborov – jeden súbor vyaduje pre svoj správ−ny beh nejaký iný (èi u hlavièkový, alebo zdrojový) súbor, ten vyaduje znovu nejakýsúbor atï. – a <strong>na</strong> konci tejto reaze (alebo niekde uprostred) urobíte zmenu – a u musí−te kompilova všetky súbory, ktoré vyadujú zmenený súbor. Máte aj druhú monos,ktorú však (pokia¾ nemáte x−procesorový high−end server s nieko¾kými zvyšnými GHz CPU)neodporúèam. Ide o prekompilovanie vdy celého programu. Pokia¾ ide o program typuHello, world!, dalo by sa to zvládnu... ale ko¾ko je takýchto programov? Teda tadia¾cesta nevedie. Keïe nie sme prví, ktorí majú takýto problém, riešenie sa u <strong>na</strong>šlo. Ako uisto tušíte, volá sa Make.Je to program, ktorý sa, samozrejme, spúša zo shellu. Riadi sa istým súborom, <strong>na</strong>zvanýmMakefile. V òom sú uloené tzv. pravidlá, pod¾a ktorých sa zostaví výsledný program. No apráve tvorbe týchto súborov sa budeme venova v prvých èastiach nášho seriálu.AKO TO FUNGUJE? Ak chceme pouíva program Make, musíme v adresári pro−jektu vyvori súbor makefile, prípadne Makefile, do ktorého uloíme riadiace príkazy –pravidlá. My budeme dáva prednos názvu s ve¾kým písmenom. Výhoda je zrejmá: privýpise obsahu adresára (aj <strong>na</strong>pr. v programe mc) sa súbor <strong>na</strong>chádza <strong>na</strong> zaèiatku – priiných dôleitých súboroch, <strong>na</strong>pr. README, INSTALL, COPYING, AUTHORS, ChangeLog aNEWS. Keï máme tento súbor vytvorený, vdy, keï chceme <strong>sk</strong>ompilova program, staèí<strong>na</strong>písa príkaz make. Ak pouívate editor ViM (http://<strong>www</strong>.vim.org), staèí v príkazovommóde zada :make. ViM spustí program make, preparsuje jeho výstup a v prípade chýbvás automaticky presunie v chybnom súbore <strong>na</strong> chybný riadok. Editor Emacsnepouívam, take o podobnej funkcii neviem. Urèite však nieèo podobné existuje aj vòom. Kadý zmenený zdrojový súbor sa prekompiluje. Ak sa zmenil hlavièkový súbor (.h),prekompilujú sa zdrojové texty, ktoré ho vkladajú. To však závisí od súboru Makefile. Noa <strong>na</strong>koniec, ak bol prekompilovaný ¾ubovo¾ný súbor, zlinkujú sa všetky objektové súborydohromady. A ako vie Make zisti, èi bol súbor zmenený? Vyuije èas poslednej zmeny,ktorý porovnáva s èasom kompilácie. To je len hrubý náèrt, ako Make funguje. Nemusímevšak len kompilova. Program Make sa môe rov<strong>na</strong>ko dobre postara o dokumentáciu.Ak píšete nejaký text, nech u je v TeX, SGML èi Texinfo, môete si pomôc pri vytváranívýstupných súborov. Všetko však závisí od pravidiel, ktoré sa <strong>na</strong>chádzajú v Makefile.PRAVIDLÁ. V predchádzajúcich riadkoch som viackrát spomenul termín pravidlo. Èoto je? Pravidlo je text, pod¾a ktorého sa Make správa v danej situácii. Pravidlá sa <strong>sk</strong>ladajúz cie¾a, zdroja a príkazu. V jednom pravidle môe by <strong>na</strong>raz viac cie¾ov, zdrojov, ale aj prí−kazov. Môeme dokonca urobi aj všeobecné pravidlá, ktorým <strong>na</strong>pr. vyhovujú všetkysúbory, konèiace sa príponou .c. Pravidlo môe vyzera takto:cie ... : zdroj ...pr kaz...Cie¾ je súbor, ktorý sa daným pravidlom vytvorí. Zdroj je súbor (súbory), z ktorých sadaný cie¾ zostaví. Príkaz je shellový príkaz, ktorý sa spustí. Musí sa zaèa z<strong>na</strong>kom „tab“!(to by sa iadalo aspoò trikrát podèiarknu, pretoe je to zo zaèiatku èastým zdrojomproblémov). Iba tak je moné rozlíši cie¾ od príkazu. Cie¾ má ešte jednu pozoruhodnúvlastnos: keby sme spustili program Make takýmto spôsobom:make automaticky sa zaène pravidlom, ktoré má vytvori . Ak ste u niekedy nieèo kom−pilovali, asi ste zadali aj príkaz make install. Práve tam sa (okrem iných prípadov) pouívaspomí<strong>na</strong>ná vlastnos. Mono vás <strong>na</strong>padlo, ktorým pravidlom sa zaène, ak explicitnenezadáme nijaké pravidlo. Nu, kadý správny Makefile má pravidlo zvané all. Väèšinousa ním zaène samotná kompilácia. Cie¾ install má <strong>na</strong> svedomí kopírovanie súborov, prog−ramov atï.PREMENNÉ. Text môe obsahova aj tzv. premenné, známe z programovacích jazy−kov. Definujú sa podobne ako v shelli:PREMENN` = hodnotaPouívajú sa však mierne odlišne:$(PREMENN`)Ak sa v súbore bude <strong>na</strong>chádza takýto text, bude <strong>na</strong>hradený jeho hodnotou. Je tove¾mi pouívaná vlastnos. Pomocou premenných môete <strong>na</strong>príklad definova prekladaè,linkovaè atï. Ïalej pouijete iba premennú. Ak budete chcie zmeni prekladaè, staèí hozmeni raz – v definícii premennej, ostatné za vás urobí Make. Okrem klasických premen−ných však existujú aj špeciálne premenné, ktoré majú špecifický obsah a „zvláštne“meno. Pouívajú sa hlavne pri tvorbe všeobecných pravidiel. Viac si o tom povieme v nie−ktorej z <strong>na</strong>sledujúcich èastí.KOMENTÁRE. Pouívajú sa podobne ako v shelli, teda kadý riadok zaèí<strong>na</strong>júci saz<strong>na</strong>kom # bude jednoducho ignorovaný. Niekedy sa zíde robi si poznámky priamo <strong>na</strong>mieste èinu. Ak sa po dlhšom èase vrátite k zloitejšiemu súboru, môe sa sta, e si jed−noducho nebudete pamäta, preèo ste daný problém riešili práve tak. A èo ak by mal danýsúbor editova niekto iný? Kým by sa v òom zorientoval, stihol by <strong>na</strong>písa aj nový súbor.Ahoj, svet!Nedoèkavci (ako <strong>na</strong>pr. ja :−) u iste netrpezlivo èakajú <strong>na</strong> nejaký príklad. Zaèneme teda kla−sickým (poslovenèeným :−) programom „Ahoj, svet!“, ktorý vypíše spomí<strong>na</strong>ný text. Budesa <strong>sk</strong>lada zo zdrojového súboru ahoj.c a súboru Makefile.ahoj.c:#include int main(){printf( Ahoj, svet!\n );return 0;}Dúfam, e nikomu netreba blišie priblíi daný súbor. ašie to bude s druhým súbo−rom. Najprv si ho ukáme.Makefile:# Nastavenia (kompilÆtor, linkovaŁ a ich <strong>na</strong>stavenia - cesty ku kni niciam apod.)# KompilÆtor jazyka CCC = gcc# Nastavenia pre samotn projekt# NÆzov programuTARGET = ahoj# ZdrojovØ sœborySRC = ahoj.c# PravidlÆ# HlavnØ pravidlo - <strong>sk</strong>ok <strong>na</strong> pravidlo ahojall: $(TARGET)# Pravidlo ahoj zostav program zo zdrojov ch sœborov. ZÆvis od zdrojovch sœborov.$(TARGET): $(SRC)$(CC) -o $(TARGET) $(SRC)Tak, to je náš prvý Makefile. Myslíte, e „ruène“ – teda spustením gcc −o ahoj ahoj.c –by to bolo kratšie a rýchlejšie? Máte pravdu, ale iba pokia¾ ide o náš jednoduchý príklad.U pri dvoch−troch súboroch oceníte výhody Make! Teraz si riadok po riadku vysvetlímevýz<strong>na</strong>m obsahu súboru Makefile. V prvom riadku (ktorý nie je komentár) <strong>na</strong>stavíme pre−kladaè, ktorý práve pouívame. Je ním gcc. Skratka CC z<strong>na</strong>mená C Compiler. V ïalšomriadku <strong>na</strong>stavíme názov výsledného programu (TARGET z<strong>na</strong>mená cie¾). V treom riadkuvymenujeme všetky zdrojové súbory (SRC je <strong>sk</strong>rátené slovo SOURCE, teda zdroj). Potom<strong>na</strong>sledujú pravidlá. Prvé má takýto výz<strong>na</strong>m: ak spustíte make, je to to isté, ako keby stespustili make ahoj. Ïalší riadok zaistí, aby sa program prekompiloval vdy, ak zmenímeniektorý zo súborov. V <strong>na</strong>sledujúcej èasti nášho seriálu si ukáeme, ako prikáza progra−mu make, aby prekompiloval iba zmenené súbory a potom ich zlinkoval s ostatnýmiobjektmi. V <strong>na</strong>sledujúcom riadku sa pouije definovaný kompilátor, <strong>sk</strong>ompiluje všetkyzdroje a spojí ich do výsledného súboru ahoj. Tu si môeme všimnú výhody pouitia pre−mennej SRC <strong>na</strong>miesto vymenovania súborov – ak pridáme nejaké nové súbory, staèízmeni jediný riadok (SRC = ...). Ak zmeníme kompilátor (v tomto prípade si neviempredstavi, kto by to robil, gcc je všade a je <strong>na</strong>jlepší... :−), staèí zmeni prvý riadok.ZÁVER. To by bolo <strong>na</strong>teraz všetko. Nabudúce si preberieme okrem iného aj tvorbuprojektov, ktoré sa <strong>sk</strong>ladajú z viac ako jedného zdrojového súboru, a parametre progra−mu Make, ktorými môete ovplyvni jeho správanie. Keby sa v texte <strong>na</strong>šli nejaké chyby,pošlite ich <strong>na</strong> uvedený e−mail. Samozrejme, pošlite aj svoje návrhy, námety a pod. Tešímsa <strong>na</strong> stretnutie o mesiac.Oto Komiòák1/2002 PC REVUE 117

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

Saved successfully!

Ooh no, something went wrong!