IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Podobné dokumenty
Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Lekce 7 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

1 Návod na instalaci prostředí LeJOS-NXJ a přehrání firmwaru NXT kostky

Vývoj programů. ÚVOD DO OPERAČNÍCH SYSTÉMŮ

Lekce 23 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

PB071 Úvod do jazyka C

Základy programování (IZP)

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

Lekce 3 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Základy programování (IZP)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Linux CryptoFS. Petr Novický

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Lekce 8 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

INSTALACE PRODUKTU ONTOPIA KNOWLEDGE SUITE

Nástroje pro vývoj software

Základy programování (IZP)

Registrační číslo projektu: CZ.1.07/1.5.00/ Název projektu: Moderní škola 21. století. Zařazení materiálu: Ověření materiálu ve výuce:

Cvičení MI-PAP I. Šimeček, M. Skrbek, J. Trdlička

INSTALACE SW V GNU/LINUXU

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

Vyšší odborná škola a Střední škola,varnsdorf, příspěvková organizace. Šablona 5 VY 32 INOVACE

Operační systémy. Cvičení 3: Programování v C pod Unixem

Uživatelská příručka

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

PSK3-9. Základy skriptování. Hlavička

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

INFORMATIKA MS WORD TVORBA VLASTNÍHO STYLU

11. Přehled prog. jazyků

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

ÚVOD DO UNIXU. Metodický list č. 1

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

PŘÍKAZOVÝ ŘÁDEK ZÍSKÁVÁNÍ NÁPOVĚDY

DERATIZACE ANEB PROČ PŘÍKAZY ;)

Vyšší odborná škola a Střední škola,varnsdorf, příspěvková organizace. Šablona 20 VY 32 INOVACE

Webový server lapache

Simluátor Trilobota. (projekt do předmětu ROB)

Vyšší odborná škola a Střední škola,varnsdorf, příspěvková organizace. Šablona 15 VY 32 INOVACE

Úvod do programování. Lekce 1

FILTRY V GNU/LINUXU ZLÍNSKÝ KRAJ. Obchodní akademie, Vyšší odborná škola a Jazyková škola s právem státní jazykové zkoušky Uherské Hradiště

Střední odborná škola a Střední odborné učiliště, Hořovice

Základní příkazy OS UNIX

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

FORTANNS. 22. února 2010

Lekce 33 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

Střední odborná škola a Střední odborné učiliště, Hořovice

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody

Instalace TEX Live 2007 pro Windows

Programujeme v softwaru Statistica

Šablona 10 VY_32_INOVACE_0106_0110 Rovnice s absolutní hodnotou

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Základy HTML. Autor: Palito

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Jan Kratochvíl, F 3 MOD. 15. února 2004

EU peníze středním školám digitální učební materiál

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Textové soubory

Lekce 25 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

Optimalizace. Optimalizace. Profilování. Gprof. Gcov. Oprofile. Callgrind. Intel Vtune. AMD CodeAnalyst

AUTHOR : Robert Follner DATE. Abstrakt ABSTRACT: Několik poznatků autora (Robert Follner) z programování

Vyšší odborná škola a Střední škola,varnsdorf, příspěvková organizace. Šablona 4 VY 32 INOVACE

PŘÍKAZY PRÁCE SE SOUBORY

Střední odborná škola a Střední odborné učiliště, Hořovice

Instalační a uživatelská příručka aplikace VHDT

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu

Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková. Výukový materiál

Jak funguje GNU/Linux

PHP tutoriál (základy PHP snadno a rychle)

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Programování v C++ 1, 1. cvičení

DUM 06 téma: Tvorba makra pomocí VBA

Předpoklady správného fungování formulářů

Unity a Objekty (NMIN102) RNDr. Michal Žemlička, Ph.D.

PB161 Programování v jazyce C++ Přednáška 4

Projekt do předmětu PAS. Textový editor

PHP. nejen pro začátečníky. $c; echo { Martin Pokorný. Vzdìlávání, které baví Nakladatelství a vydavatelství.

Transkript:

Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 CZ.1.07/1.5.00/34.1076 Pro vzdělanější Šluknovsko 32 - Inovace a zkvalitnění výuky prostřednictvím ICT 0202 Ing. Vladimír Ďurči LINUX VY_32_INOVACE_0202_0303 Jak vytvořit program v Linuxu? Makefile [3/3] JAZYK C - OS LINUX Vytvořeno 25. 8. 2013 Určeno pro Operační systémy 4. ročník, maturitní obor Přílohy Přiložené textové soubory, a zpracované programy IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Lekce 3 J a k v y t v o ř i t p r o g r a m v L i n u x u? M a k e f i l e Obsah lekce: Cíle... 1 Makefile... 2 Příklad + Zabalení... 3 Shrnutí 1. a 3. lekce... 4 Lab 5

C í l e Tato lekce je velmi stručným úvodem do vytváření souboru. Mak e f i l e Pro jednoduché programy (jako je příklad v předchozí kapitole) stačí na kompilaci a slinkování jeden řádek v shellu. Ale pro rozsáhlejší projekty, kdy je zdrojový kód ve více souborech, by bylo psaní příkazu pro každý soubor velmi neefektivní a zdlouhavé. Samozřejmě to za nás může udělat skript, ale brzy zjistíme, že to stále není ono (už jen proto, že takhle to nikdo nedělá :-)). Pro kompilaci a linkování malých i velkých (př. jádro) programů nebo knihoven se prostě používá pouze a jedině Makefile. Makefile je obyčejný textový soubor, ve kterém jsou popsány závislosti mezi soubory a způsob kompilace a linkování. Tento soubor používá program make, který jej po spuštění hledá jako soubor Makefile, makefile nebo GNUmakefile. P ř í k l a d + Z a b a l e n í Příklad Soubor "Makefile": # Program "priklad", 2000 # CFLAGS = -Wall priklad: priklad.c libtext.h libtext.so $(CC) $(CFLAGS) -o $@ $< -L. -ltext libtext.so: libtext.c libtext.h $(CC) $(CFLAGS) -shared -o $@ $< clean: rm -f libtext.so priklad První dva řádky jsou komentáře. Nejdříve se nastaví proměnná CFLAGS. Proměnné se definují jako jmeno = hodnota a volají se jako $(jmeno) (bez závorek, pokud je jméno jednopísmenné). Pak se určí první závislost - na čem je závislý samotný program: na zdrojových souborech priklad.c, libtext.h a knihovně libtext.so, která se musí teprve vytvořit. Závislosti se píší ve tvaru cile: soubory_na_kterych_jsou_cile_zavisle, kde cile jsou jsou soubory, které se mají vytvořit, oddělené mezerou, a za dvojtečkou jsou soubory, které jsou k tomu potřeba. Další řádek je příkaz, kterým se vytvoří program "priklad" a vykoná se jen, pokud bude některý ze souborů priklad.c, libtext.h nebo libtext.so novější než soubor priklad. POZOR: Příkaz v Makefile 3

musí začínat tabulátorem (mezery make nezbaští)!!! make každý příkaz vypisuje. Pokud nechcete, aby se příkaz nepsal na výstup, napište před něj zavináč @. Další řádky určují závislost a způsob vytvoření knihovny libtext.so. Pokud potřebujete něco, co má být na jednom řádku, rozdělit do více řádků, musí být na konci všech řádků (kromě posledního) zpětné lomítko \. V praxi (a v tomto příkladě také) se často používají již předdefinované proměnné, např.: CC -- kompilátor, defaultně cc MAKE -- program make; tato proměnná se používá k rekurzivnímu volání make $ -- znak $ @ -- cíle v určení závislosti, tj. všechno před dvojtečkou < -- první soubor za dvojtečkou ^ -- všechny soubory za dvojtečkou (oddělené mezerou, každý jedenkrát) a dále se obvykle nastavují např. tyto (defaultně jsou nastavené na ""): CFLAGS -- volby kompilátoru LDFLAGS -- volby linkeru TARGETS -- konečné cíle, většinou jméno programu Nyní můžete spustit program make. Ten najde soubor Makefile a vezme si první cíl (priklad). Soubor libtext.so neexistuje, takže make přejde na určení jeho závislosti, vytvoří jej a nakonec už může provést cíl priklad. Pokud spustíte make s parametrem priklad, stane se totéž. Pokud jej však spustíte s parametrem libtext.so, vytvoří se jen knihovna. Při spuštění bez parametru si make totiž vezme ten první cíl, parametrem můžeme určit, jaký cíl má provést. Pokud za dvojtečkou není uveden žádný soubor, přikaz se provede vždy. Klasickým příkladem je "čistka" (vymazání souborů vzniklých kompilací a linkováním): clean: rm -f priklad.o libtext.so priklad Program make má samozřejmě také nějaké parametry, zde jen ty nejdůležitější: -C dir -- ještě před čtením Makefile se přepne se do adresáře dir; používá se při rekurzivním volání make -f file -- místo Makefile zpracovává soubor file -j jobs -- počet úloh (příkazů) prováděných paralelně; pokud jobs není uvedeno, počet není omezen -n -- jen vypisuje příkazy, které by vykonal, ale nevykonává je -s -- nevypisuje příkazy Zabalení Teď, kdy už všechno máme hotové, můžeme zdrojové texty a Makefile (a vše ostatní, př. datové soubory, dokumentaci,...) zabalit do balíčku pro uživatele. Standardně jsou to archivy tar.gz (tgz). Balíček vytvoříme takto: tar cfz balicek.tar.gz adresar_s_programem 4

Tento balíček můžeme dát např. na internet. (Více se o balení pod Linuxem dozvíte v článku Balení a rozbalování pod Linuxem.) Příklad Vytvoření balíčku: tar cfz priklad.tar.gz priklad Uživatelská část V této části se podíváme na uživatelovo počínání s naším programem. Ten si např. stáhne náš program (balíček) z internetu a zkopíruje do adresáře, kde jej chce mít. Teď musí balíček rozbalit: tar xfz balicek.tar.gz Pak přejde do adresáře s programem a zkompiluje ho: make Nakonec je někdy potřeba udělat ještě nějaké další věci, které jak který program potřebuje (př. pro náš příklad - nastavit proměnnou prostředí LD_LIBRARY_PATH). Jak je vidět, uživatel má nesrovnatelně jednodušší práci než my - vývojáři (nebo chcete-li programátoři). S h r n u t í 1. a 2. l e k c e Překlad s gcc Z minulé lekce známe základy práce s gcc. Jednoduché projekty z několika zdrojových souborů lze obvykle přeložit prostým příkazem gcc soubor1.c soubor2.c souborn.c -o program V případě větších projektů je tento postup nevýhodný. Překlad může obsahovat sestavování jednotlivých logických celků, vytváření a linkování knihoven, navíc výsledkem může být hned několik programů, které mají část kódu společnou. Překlad C nebo C++ kódu je hlavně díky preprocesoru a optimalizacím časově náročný a zejména při vývoji by bylo neúnosné překládat po jediné změně libovolného zdrojového souboru celý projekt od začátku. Hodně času ušetří oddělení fáze preprocesingu a vlastního překladu od linkování, neboť pak můžeme využít mezivýsledky minulého překladu. gcc soubor1.c -c gcc soubor2.c -c gcc souborn.c -c gcc soubor1.o soubor2.o souborn.o -o program Prvními třemi příkazy provedeme odděleně vlastní překlad jednotlivých zdrojových souborů, objektový kód se uloží do soubor1.o, soubor2.o a souborn.o. Posledním příkazem pak objektové 5

soubory slinkujeme do výsledného programu. Pokud potom při ladění změníme například první *.c soubor, stačí zavolat gcc soubor1.c -c gcc soubor1.o soubor2.o souborn.o -o program Při modifikaci hlavičkového souboru sice musíme překompilovat všechny *.c soubory, které jej přímo nebo zprostředkovaně inkludují, ale přesto nám oddělení vlastního překladu od linkování při vývoji skutečných praktických projektů ušetří spoustu času, který bychom jinak strávili čekáním na překladač. Bohužel vyznat se v časech modifikací a závislostech zdrojového kódu na hlavičkových souborech je nad síly běžného programátora. Proto vznikl make. Makefile Příkaz make provádí akce závislé na jiných akcích a může přitom mimo jiné testovat existenci a porovnávat datum poslední modifikace souboru. Seznam akcí a závislostí je popsán v souboru, který se obvykle jmenuje Makefile. Samotný make není přímo svázaný s překladem C, lze a má rozumný smysl jej použít v podstatě na libovolnou složitější sadu akcí s vysokým stupněm závislosti, kde neexistuje lepší řešení, klidně třeba vytvoření balíčku s dokumentací v pdf z textovských zdrojáků. Je ovšem pravda, že překlad C/C++ je určitě nejčastějším příkladem použití make a platí to i naopak, standardním způsobem organizace překladu na Unixu je Makefile. Jednoduchý projekt ze tří souborů v Makefile by mohl vypadat asi takhle: priklad: funkce.o main.o gcc funkce.o main.o -o priklad funkce.o: funkce.c gcc funkce.c -c main.o: main.c funkce.h gcc main.c -c Umístíme jej do adresáře se zdrojovým kódem a projekt přeložíme prostým příkazem make Pokud si to budete chtít vyzkoušet a budete kopírovat Makefile z webového prohlížeče přes schránku, dejte si pozor na odsazení příkazů. Odsazení jednotlivých příkazů musí být provedeno pomocí tabelátoru. To je určitě nejhloupější vlastnost make. Stáhněte si proto raděj celý příklad zabalený jako c17beta.tar.gz. Jak to celé funguje? V souboru Makefile je sada pravidel typu cíl: závislost1 závislost2... [tabelátor]akce Cíl uvedený jako první je implicitní cíl příkazu make. Můžeme jej také určit explicitně jako první parametr, takže například make main.o provede pouze vlastní překlad souboru main.c podle třetího pravidla. Při volání make bez parametrů je cílem přeložený program - soubor priklad. Make nejprve projde závislosti, zde funkce.o a main.o. Nejdřív ověří funkce.o a zjistí, že soubor neexistuje, ale může jej vytvořit pomocí druhého pravidla. 6

V pravidle pro funkce.o je závislost na funkce.c, ta je splněna, neboť soubor funkce.c existuje a není pro něj žádné pravidlo. Dojde tedy na akci pravidla pro funkce.o, make zavolá gcc funkce.c -c a vrátí se k testování závislostí prvního pravidla. Přečte si, že priklad závisí ještě na main.o, a tak jej pomocí třetího pravidla (zcela analogicky jako v případě funkce.o) vytvoří. Nyní již jsou splněny všechny závislosti a make se dostane k vykonání akce hlavního prvního pravidla. gcc funkce.o main.o -o priklad Trochu složitější to je, pokud jsme už celý projekt přeložili, ale dodatečně ještě změnili main.c (stačí zavolat touch main.c) a zavolali make. Při testu závislostí prvního pravidla sice oba objektové soubory existují a budou i o nějakou tu desetinu vteřiny starší než soubor priklad, ale v Makefile jsou i pro ně napsaná pravidla, a make tedy musí nejprve ověřit rekurzivně i jejich závislosti. V případě funkce.o je závislost splněna, neboť funkce.c je starší než funkce.o a pro funkce.c neexistuje žádné pravidlo. V případě main.o je tomu jinak, neboť main.c je mladší než main.o. Dojde tedy na akci gcc main.c -c a tím se vytvoří nový main.o s aktuálním časem modifikace. To znamená, že main.o bude mladší než priklad a make musí po návratu do zpracování prvního pravidla zavolat na závěr i jeho akci. gcc funkce.o main.o -o priklad Syntaxe Makefile umožňuje také vkládat komentáře a definovat proměnné. # Tohle je naše první proměnná OBJ=main.o funkce.o # Použitím proměnné OBJ si ušetříme trochu psaní priklad: ${OBJ} gcc ${OBJ} -o priklad Jako typické použití proměnných bych uvedl nepovinné parametry překladače. Pomocí přepínačů - O0 až -O3 můžeme určit míru optimalizace gcc, pomocí -g zase přidáme do kódu ladící informace, které pak můžeme využít například nástroji typu gdb nebo valgrind. Nastavením jediné proměnné v Makefilu tak můžeme ovlivnit způsob překladu všech souborů, nejspíš se bude lišit překlad distribuční verze projektu od překladu během vývoje. Často se v Makefile vyskytují vedlejší cíle. Už víme, že implicitně make zpracovává první cíl uvedený v Makefile, ale nic nám nebrání definovat další, obvyklé jsou například clean (smazání souborů vygenerovaných při překladu), install (instalace přeloženého projektu), uninstall a distrib (vytvoření distribuce zdrojového kódu projektu v jediném balíčku), běžně se lze také setkat s generováním dokumentace nebo přeložených balíčků pro systémy správy nainstalovaného software jako je například RPM. V souvislosti s cíli, jimž neodpovídá žádný soubor se používá speciální cíl.phony. S jeho pomocí můžeme sdělit make, že cíl není vázaný na soubor stejného jména. Příkaz make clean 7

pak bude fungovat i v případě, že v adresáři projektu shodou okolností existuje soubor jménem clean. 8

O t á z k y k o p a k o v á n í 1. Kterou funkci obsahují v jazyce C? Proč je vhodné rozdělit velký program do několika funkcí? 2. Jakým příkazem se přeloží soubory prog.c a func.c do spustitelného programu? 9

L a b. 10