POSIX, Make, CMake. Miroslav Jaroš. PB071 Úvod do nízkoúrovňového programovnání. 29. dubna 2019

Podobné dokumenty
PB071 Programování v jazyce C

PB071 Úvod do jazyka C

Základy programování (IZP)

Základy programování (IZP)

konec šedesátých let vyvinut ze systému Multics původní účel systém pro zpracování textů autoři: Ken Thompson a Denis Ritchie systém pojmnoval Brian

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

Procesy a vlákna (Processes and Threads)

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Práce se soubory. Úvod do programování 2 Tomáš Kühr

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

IT ESS II. 1. Operating Systém Fundamentals

Linux Teorie operačních systémů a realita

Struktura programu v době běhu

Pár odpovědí jsem nenašla nikde, a tak jsem je logicky odvodila, a nebo jsem ponechala odpověď z pefky, proto je možné, že někde bude chyba.

Základy programování (IZP)

Operační systémy. Tomáš Vojnar IOS 2009/2010. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

Metody připojování periferií

monolitická vrstvená virtuální počítač / stroj modulární struktura Klient server struktura

C++ a vnitřní svět. David Bednárek Jakub Yaghob Filip Zavoral

Matematika v programovacích

Základy programování (IZP)

Instalace a konfigurace web serveru. WA1 Martin Klíma

IUJCE 07/08 Přednáška č. 1

Základy programování (IZP)

8 Třídy, objekty, metody, předávání argumentů metod

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

TÉMATICKÝ OKRUH Softwarové inženýrství

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

Práce se soubory. Úvod do programování 2 Tomáš Kühr

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

ČÁST 1. Základy 32bitového programování ve Windows

Práce se soubory. Základy programování 2 Tomáš Kühr

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

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Vetřelec v systému Linux

IUJCE 07/08 Přednáška č. 6

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

C++ a vnější svět. David Bednárek Jakub Yaghob Filip Zavoral

Knot DNS Resolver. Modulární rekurzivní resolver. Karel Slaný

Systém souborů (file system, FS)

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Operační systémy. Cvičení 1: Seznámení s prostředím

PC Fand a Linux Budoucnost PC FANDu

Operační systémy. Přednáška 1: Úvod

Vláknové programování část I

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

Dílčí příklady použití jazykových konstrukcí v projektu. Jazyk C Příklady. Pravidla překladu v gmake. Zadání

Webový server lapache

Windows a real-time. Windows Embedded

Management procesu I Mgr. Josef Horálek

ZOS OPAKOVÁNÍ. L. Pešička

Operační systémy 1. Přednáška číslo Souborové systémy

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod Vítejte v Ruby 15. O autorovi 9 Poděkování 9

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

Souborové systémy Mgr. Josef Horálek

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

Základy programování (IZP)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

6 Příkazy řízení toku

Procesy a vlákna - synchronizace

Úvod do Linuxu. SŠSI Tábor 1

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

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

Úvod do Unixu. man: příkaz pro zobrazení nápovědy k danému příkazu, programu (pokud je k dispozici), např. man cp. pwd: vypíše cestu k aktuální pozici

Přednáška 11. Historie MS Windows. Architektura Windows XP. Grafické a znakové rozhraní. Úlohy, procesy a vlákna.

Spojová implementace lineárních datových struktur

Karel Bittner HUMUSOFT s.r.o. HUMUSOFT s.r.o.

Paralelní výpočty na clusteru KMD

TG Motion verze 4 Modul Virtuální PLC návod k obsluze

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

Pokročilé architektury počítačů

1. Programování proti rozhraní

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

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

PB071 Programování v jazyce C Jaro 2015

a co je operační systém?

Jak funguje GNU/Linux

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

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Základy programování (IZP)

Základy programování (IZP)

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti

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

Práce s pamětí. Tématicky zaměřený vývoj aplikací v jazyce C skupina Systémové programování Linux. Martin Husák, Petr Velan, Martin Drašar

Základní typy struktur výpočetních systémů

Operační systémy. Cvičení 5: Volání jádra, procesy, vlákna.

Rozdělení operačních systémů

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

Úvod, jednoduché příkazy

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

Ukázka zkouškové písemka OSY

TG Motion verze 4 Modul Virtuální PLC návod k obsluze

František Hudek. únor ročník

Přednáška. Systémy souborů. FAT, NTFS, UFS, ZFS. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

09. Memory management. ZOS 2006, L.Pešička

Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Transkript:

POSIX, Make, CMake Miroslav Jaroš PB071 Úvod do nízkoúrovňového programovnání 29. dubna 2019 Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 1 / 33

Obsah 1 POSIX Proč POSIX POSIX C Library Adresáře a soubory Procesy a vlákna 2 Make, CMake make Generátory 3 Závěr Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 2 / 33

POSIX POSIX Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 3 / 33

POSIX Proč POSIX Motivace Proč se zabývat operačním systémem? Standardní knihovna přináší programátorovi základní funkci pro práci s prostředky počítače Nicméně kdykoliv program potřebuje interagovat s hw musí požádat OS o zpřístupnění Práce se soubory Požadavek na naalokování stránky do virtuální paměti Spuštění podprocesu v shellu Řízení vláken (od C11) Jak standardní knihovna zvládá toto všechno implementovat? Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 4 / 33

POSIX Proč POSIX Motivace Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 5 / 33

POSIX Proč POSIX Historie Aneb od UNIXu ke standardu POSIX Portable Operating System Interface Norma pro rozhraní operačního systému založená na operačním systému UNIX UNIX vznikl roku 1971 a již roku 1973 byl přepsán do jazyka C Jeho autoři jsou Dennis M. Ritchie a Ken Thompson Součástí normy POSIX je knihovna pro jazyk C POSIX C Library, která definuje základní rozhraní operačního systému Pro použivání ochrané známky UNIX musí operační systém plně implementovat normu POSIX a být certifikovaný podle Single Unix Specification Např. macos je certifikovaný UNIX Linux není Nicméně většina UNIX-like (nebo také UN*X) systémů jej dodržuje (s odchylkami) Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 6 / 33

POSIX POSIX C Library POSIX C Library API operačního systému Zpřistupňuje funkce pro interakci s operačním systémem Snaží se o vytvoření API kompatibilního se standardní knihovnou C, která je její součástí Pokrývá širokou škálu služeb jádra poskytovaných programům Správa procesů (start, komunikace, ukončení) Přístup k souborovému systému, síťovému rozhraní, pipes Správa a synchronizace vláken (spouštění, vyloučení přistupu, semafory... ) Správa virtuální paměti procesu (mapování stránek, dealokace... ) A mnoho dalších... Tím umožňuje psaní přenositelných programů s daleko širším záběrem, než má standardní knihovna Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 7 / 33

POSIX POSIX C Library Kompatibilita UN*X systémy (Linux, macos, Solaris... ) Windows Pokud je systém certifikován jako UNIX, potom splňuje POSIX Linux jej s minimálními odchylkami splňuje taktéž Má vlastní API operačního systému Win32 a WinRT Nicméně části POSIX implementuje, ale ne plně MinGW a Cygwin implementuji POSIX prostředí pomocí Win32 API Od Windows 10 obsahuje Windows Subsystem for Linux Emuluje rozhraní Linuxu, pro běh linuxových aplikací Pro instalaci a další zrdoje viz tutorial https://www.fi.muni.cz/pb071/tutorials/ubuntu-on-windows/ index.html Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 8 / 33

POSIX Adresáře a soubory Souborový systém I V UNIX-like systémech je souborový systém implementován jako n-ární strom s jedním kořenem. Všechny svazky (jiné disky, síťová úložište, ale i zařízení) jsou v něm adresovány - mount. Kořen souborového systému se jmenuje /. Soubory jsou implementovány pomocí inode (i-uzel). inode je datová struktura popisující objekt existující v souborovém systému. Váží se na něj všechny atributy souboru, jako velikost, oprávnění, datum vytvoření, modifikace atd. inode nicméně neobsahuje informaci o tom, ja se daný soubor jmenuje, nebo kde se ve FS nachází. Vazba mezi jménem souboru a jeho inode je implementována na úrovni adresáře. Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 9 / 33

POSIX Adresáře a soubory Souborový systém II Pro získání informací o souboru se používají funkce stat, fstat, lstat int stat(const char *path, struct stat *buf); Při úspěchu je struct stat naplněna informacemi o souboru. Více viz man 3 stat. struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* Inode number */ mode_t st_mode; /* File type and mode */ nlink_t st_nlink; /* Number of hard links */ uid_t st_uid; /* User ID of owner */ gid_t st_gid; /* Group ID of owner */ dev_t st_rdev; /* Device ID (if special file) */ off_t st_size; /* Total size, in bytes */ blksize_t st_blksize; /* Block size for filesystem I/O */ blkcnt_t st_blocks; /* Number of 512B blocks allocated */ } Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 10 / 33

POSIX Adresáře a soubory Práce se soubory Velice podobná jako ve standardní knihovně Místo struktury FILE * se používá file deskriptor, který je typu int int open(const char *path, int oflag,...); int close(int fd); ssize_t read(int fildes, void *buf, size_t nbyte); ssize_t write(int fildes, const void *buf, size_t nbyte); ssize_t je rozšírení typu size_t o záporná čísla Manuálové stránky těchto funkcí dle POSIX man 3 $JMENO_FUNKCE Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 11 / 33

POSIX Adresáře a soubory Adresáře Adresář je specifická entita v rámci file systému a její formát na něm záleží Stejně jako u souborů (jimiž ve skutečnosti většinou i bývají) je práce s nimi programátorovi zpřístupněna operačním systémem Pro práci s adresáři se používá kombinace funkcí opendir, readdir a closedir DIR *opendir(const char *name); Vrací ukazatel na DIR, což je reprezentace otevřeného adresáře pro OS struct dirent *readdir(dir *dirp); Přečte další položku v adresáři Pokud v adresáři není žádný další prvek, vrací NULL int closedir(dir *dirp); Ukončuje práci s adresářem a uvolňuje zdroje I zde platí stejně jako u fopen nebo malloc, že pokud funkce opendir neselhala, musí být nad její návratovou hodnotou zavolána funkce closedir Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 12 / 33

POSIX Adresáře a soubory Adresáře II. Po zavolání funkce readdir je vrácena struct dirent * struct dirent { ino_t d_ino; /* Inode number */ off_t d_off; /* Not an offset; see below */ unsigned short d_reclen; /* Length of this record */ unsigned char d_type; /* Type of file; not supported by all filesystem types */ char d_name[256]; /* Null-terminated filename */ }; Položka d_name obsahuje jméno prvku ve složce, ale ne cestu, ta musí být zrekonstruována jiným způsobem Položka d_type může obsahovat typ prvku, ale v závislosti na použitém file systemu také nemusí Pro zjištění typu lze d_type testovat proti konstantám DT_REG běžný soubor DT_DIR adresář DT_UNKNOWN File system nepodporuje d_type a typ je potřeba zjistit jinak, například voláním lstat A dalším (viz man 3 readdir) Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 13 / 33

POSIX Adresáře a soubory Procházení adresáře void PosixPrintFiles(const char* path) { DIR *dir = NULL; if ((dir = opendir(path))) { // connect to directory struct dirent *direntry = NULL; while ((direntry = readdir(dir))!= NULL) {// obtain next item printf("file %s\n", direntry->d_name); // get name } closedir(dir); // finish work with directory } } Listing 1: Procházení FS, převzato ze starší přednášky Šimona Totha Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 14 / 33

POSIX Procesy a vlákna Procesy Proces je v OS jednotka pro běh samostatného programu s vlastní oddělenou pamětí V rámci POSIX má proces všechny zdroje (pokud nejsou sdílené) alokované pro vlastní použití (například file deskriptory) V rámcí standardní knihovny existuje funkce system, která spouští shell v novém procesu a blokuje rodičovský proces, dokud potomek neskončí V Linuxu je tato funkce implementována jako sekvence volání fork(2), execl(3) a waitpid(3) Spuštění nového procesu pid_t fork(void); Vytváří nový proces zkopírováním celé virtuální paměti rodičovského procesu. Oba procesy, jak rodič tak potomek, pokračují ve vykonávání instrukcí na následujícím řádku po volání fork Zda je proces rodič nebo potomek, lze zjistit pomocí návratové hodnoty fork Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 15 / 33

POSIX Procesy a vlákna Procesy II. Rodina funkcí exec(3) Spouští předaný program nahrazením kódu běžicího procesu kódem programu předaného funkci Volání pouze nahrazuje výkonný kód procesu, ale nemění zdroje alokované u OS (např. tabulka file descriptorů) int execve(const char *path, char *const argv[], char *const envp[]); Funkce popen(3) FILE *popen(const char *command, const char *type); Narozdíl od funkce system spouští proces asynchroně, tedy bez blokování rodiče Návratová hodnota funkce je rourou pro komunikaci s procesem Může být pouze pro čtení nebo zápis, nikoliv obojí Po skončení práce s procesem musí být nad nárvatovou hodnotou funkce zavoláno pclose, nikoliv fclose Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 16 / 33

POSIX Procesy a vlákna Vlákna Vlákna umožňují procesu vykonávat několik paralelních činností zároveň. Zároveň ale všechna vlákna mezi sebou sdílí prostředky (například paměť). Což může přinášet problémy -> souběh, uváznutí a další. Podpora pro vlákna je implementována v knihovně pthread. Umožňuje vlákna spouštět, nebo plánovat jejich odstranění. Zároveň obsahuje techniky pro synchronizaci vláken. Mutexy Conditional variable Více o vláknech se dozvíte v předmětech PB152 nebo PB153 Více o těchto funkcích například ve slidech PB065 [1]. Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 17 / 33

Make, CMake Make, CMake Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 18 / 33

Make, CMake Překládání projektů Prozatím jste se v tomto předmětu setkali s jednoduchými prográmky s jednotkami překladových jednotek, které šlo přeložit jedním příkazem. gcc -std=c99 -Wall -Wextra -pedantic -Werror *.c Tento přístup lze aplikovat na jednoduché programy, které se přeloží okamžitě. Co ale s projekty, které obsahují tisíce řádků zdrojového kódu ve stovkách souborů. I malá změna v jednom zdrojovém souboru znamená překompilování všech zdrojových souborů. Což pro velké projekty trvá opravdu dlouho (linux cca 20 minut, gcc cca 1.5 hodiny). Jak reagovat na případy, kdy potřebujeme více spustitelných souborů? Systémový démon a jeho CLI. Klient server aplikace. A co závislosti? Kde najdeme knihovny, jak se jmenuji? Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 19 / 33

Make, CMake Překládání projektů II - Přístupy Přímý překlad není moudrý, je nepřenositelný a těžko reprodukovatelný. Trošku lepším řešením je napsat si nějakou vlastní automatizaci Typicky ve forme skriptu. Tento přístup možná vyřeší problém překladu více binárek a opakovatelnosti sestavení, ale! Překládat pouze změněné překladové jednotky je poměrně těžké implementovat. Pro vyřešení vztahů mezi zdrojovými soubory, bychom museli implementovat alespoň základní parser jazyka pro jejich pochopení. A nezapomínejme na chyby. Vůbec nejlepším řešením je, použít nástroje k tomu určené. Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 20 / 33

Make, CMake make make I Nástroj na automatizaci sestavení. Popis sestavení projektu se ukládá do Makefile. Využívá rekurzivních pravidel pro vystavění stromu závislostí, který následně projde a nad každým cílem vykoná požadovanou akci Základním kamenem syntaxe je pravidlo target: source1 source2 target cíl, typicky se jedná o produkovaný soubor (binárka, nebo mezilehlá překladová jednotka), případně jde o phony cíl (viz dále). source1 source2 zdrojové soubory, může jít o soubory vytvořené předchozím pravidlem (cíle jiného pravidla), nebo zdrojové soubory překládaného programu. Akce se nad cílem vykoná, pokud: cíl neexistuje a je potřeba jej vytvořit, libovolný ze zdrojových souborů byl upraven po vytvoření cíle (datum modifikace zdrojového souboru je vyšší než datum modifikace cíle), Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 21 / 33

Make, CMake make make II cíl je phony, tedy neprodukuje žádný soubor. Spuštěním příkazu make se vyhledá soubor Makefile v lokálním adresáři. Pravidlo, které se začne vykonávat je první nalezené. Toto chování lze změnit explicitním zadáním očekávaného pravidla make clean. Proměnné makefile lze nastavit na jiné hodnoty při spuštění make all CC=clang. Pro zrychlení překladu lze použít přepínač -jn, který překládá paralelně až N překladových jednotek. make -j5 all Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 22 / 33

Make, CMake make Obrázek: Popis závislostí v projektu, zdroj: Jiří Slabý, přednáška PB071 z roku 2017 Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 23 / 33 make III

Make, CMake make Makefile Základ syntaxe jsou příkazy target: source1 source2. Pod touto deklarací jsou tabulátorem odsazené příkazy, které se mají provést. Lze v něm deklarovat proměnné VAR_NAME=value A následně je odkazovat jako $(VAR_NAME) Zobecnění pravidel: Speciální znak % je zástupným symbolem Lze jej použít pro konstrukci pravidel typu %.o: %c, které říká, že libovolné pravidlo, končící na.o, závisí na stejně jmenujícím se pravidle končícím na.c Ke každému pravidlu potom náleží další speciální proměnné $@ je jméno cíle. $< je první závislost. $ˆ jsou všechny závislosti Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 24 / 33

Make, CMake make Makefile II CC=gcc CFLAGS=-std=c99 -Wall -Wextra -pedantic -Werror all: myprog myprog: main.o test.o $(CC) $(CFLAGS) $^ -o $@ %.o: %.c $(CC) $(CFLAGS) -c -o $@ $^ clean: rm -f *.o myprog.phony: all clean Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 25 / 33

Make, CMake Generátory Generátory make je silný nástroj pro popis sestavení projektu, nicméně neřeší všechny problémy. Je nezbytné stále popisovat závislosti ručně. (Nebo si vypomáhat dodatečnými soubory třeba s pomocí gcc -MM) Má komplikovanou syntaxi a pro velké projekty již nedostačuje. Je méně přenositelný a nemá přímou podporu pro ověření vlastností kompilátoru nebo existence knihoven. Proto se pro větší projekty používají pokročílejší nástroje, které umí Makefile vygenerovat. Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 26 / 33

Make, CMake Generátory Generátory II Autotools Jeden z nejrozšířenějších nástrojů v UNIXovém světe Skládá se ze tří nástrojů: Autoconf vyhledávání externích závislostí, Automake popis překladu (podadresáře, layout projektu), Libtool podpora pro tvorbu knihoven. Výsledkem je několik servisních souborů a jeden spustitelný skript configure. Po jeho spuštění začne testování OS, zda a kde má potřebné závislosti. Při úspěchu je vygenerován Makefile Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 27 / 33

Make, CMake Generátory Generátory III CMake Se CMake se všichni minimálně od vidění známe :-) Základem konfigurace je jeden soubor CMakeLists.txt, který obsahuje popis projektu. Podobně jako u Autotools jeho spuštění generuje (krom obrovské spousty servisních souborů) Makefile. Ale neomezuje se pouze na ně, umí vygenerovat i projektové soubory pro VisualStudio, nebo Ninja build system. cmake_minimum_required(version 3.6) project(hw04) set(source_files test.cpp) add_executable(hw04 ${SOURCE_FILES}) Listing 2: Ukázka CMakeLists.txt Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 28 / 33

Závěr Závěr Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 29 / 33

Závěr Závěr Nebojte se Operačních systémů ani jejich API Dávají vám do rukou silné zbraně při programování Používejte manuálové stránky A hlavně: Nepiště si vlastní nástroje pro sestavování projektů! Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 30 / 33

Závěr Kam dál? PV004 UNIX PV065 UNIX programování a správa systému I PB173 Tematický vývoj aplikací v C/C++ (skupina zaměřená na POSIX) Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 31 / 33

Závěr Další zdroje Jan Kasprzak. PV165 Unix programování a správa systému I. https://www.fi.muni.cz/~kas/pv065/pv065.pdf. Makefile reference https://www.gnu.org/software/make/manual/html_node/index.html CMake tutorial https://cmake.org/cmake-tutorial/ Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 32 / 33

Závěr Děkuji za pozornost Miroslav Jaroš (PB071) POSIX, Make, CMake 29. dubna 2019 33 / 33