PB071 Úvod do jazyka C

Podobné dokumenty
Linux na mobilních telefonech

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

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

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

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

Øízený pøeklad - make

C2110 Operační systém UNIX a základy programování

Úvod do Operačních Systémů

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

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

Django Urls, views, templates

Rozšíření ksh vůči sh při práci s proměnnými

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

Monitorování sítě pomocí OpenWrt

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

Úvod do Operačních Systémů

Základy programování (IZP)

Multiplatformní GUI toolkity

PROGRAMOVÁNÍ V SHELLU

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

Programování v jazyce C pro chemiky (C2160) 10. Grafická knihovna g2

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

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

PB161 Luk aˇs Ruˇcka Uvod Prostˇred ı Pˇreklad PB161 P arov e programov an ı 1. cviˇcen ı Luk aˇs Ruˇcka 4. ˇr ıjna 2012

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Úloha 3 editor a skripty. připojte se vzdáleně na dray6.feld.cvut.cz heslo získáte na adrese

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Algoritmy I. Cvičení č.1 ALGI 2015/16

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

Nápověda k aplikaci EA Script Engine

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Úvod do Operačních Systémů

Rozsáhlé programy = projekty

DERATIZACE ANEB PROČ PŘÍKAZY ;)

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

Informatika / o souborech

Liberix o.p.s. Free & Open Source software. Jazyky C, C++ Autotools. Jazyky Perl, Python, Ruby. Knihovny pro tvorbu oken.

Úvod do Operačních Systémů

Základní příkazy pro práci se soubory

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

Ú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

Jazyk C++, některá rozšíření oproti C

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

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

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

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

dostat zdroják Petr Zemek Fakulta informačních technologií VUT v Brně izemek

ANCA. (Amazing NetCall Application) dokumentace

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

DTP Základy programování Úvod do předmětu

C2184 Úvod do programování v Pythonu podzim Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita.

Pokročilé programování v jazyce C pro chemiky (C3220) Úvod do jazyka C++

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

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

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

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

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

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

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

Aplikační vrstva. Úvod do Php. Ing. Martin Dostal

Základy programování (IZP)

Nové jazykové brány do Caché. Daniel Kutáč

Webový server lapache

C2184 Úvod do programování v Pythonu podzim Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita. Úvod.

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

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

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

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

Konec a tak. PB173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 15.

Od CGI k FastCGI. Uvedené dílo podléhá licenci Creative Commons Uved te autora 3.0 Česko.

Základy programování (IZP)

ISU Cvičení 2. Marta Čudová

Linux CryptoFS. Petr Novický

Standardní algoritmy vyhledávací.

5. cvičení z Matematiky 2

Paralelní výpočty na clusteru KMD

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

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

Programy pro ˇreˇsen ı ulohy line arn ıho programov an ı 18. dubna 2011

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Úvod, jednoduché příkazy

M4 PDF rozšíření. Modul pro PrestaShop.

Úvod do programování. Lekce 1

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Programování v jazyce C a C++

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

Základy programování (IZP)

ak. rok 2013/2014 Michal Španěl,

PB071 Programování v jazyce C

ISU Cvičení 2. Marta Čudová

Úvod do programovacích jazyků (Java)

LINUX ADRESÁŘOVÁ STRUKTURA. Co to, hrome, je? V této lekci se budeme brouzdat adresáři. SPŠ Teplice - 3.V

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

PRACUJEME S SHELLEM Ať žije BASH.

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

Transkript:

PB071 Úvod do jazyka C Překladové systémy Jiri Slaby Fakulta informatiky Masarykova univerzita 2. 5. 2016 Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 1 / 23

Obsah přednášky 1 Úvod a motivace 2 Vývojový nástroj make 3 Autotools, CMake 4 Závěr Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 2 / 23

Sekce 1 Úvod a motivace Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 3 / 23

Úvod Máme zdrojové soubory Chceme binárku Použijeme překladač gcc *.c Demo: jádro Chceme raději nějaký nástroj Popis, jak sestavit projekt Ale jaký? Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 4 / 23

Překladové systémy Spousta řešení Svoje vlastní Skripty v bashi, perlu, pythonu Vždy peklo Cizí Nikdy nevynalézejte kolo Udržované nástroje make, cmake, qmake,... Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 5 / 23

Obecný princip Popis závislostí + popis výroby binary ld gcc main.o impl.o libx.so main.c impl.c Musí existovat stdio.h impl.h Parametry překladače (-D apod.) Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 6 / 23

Sekce 2 Vývojový nástroj make Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 7 / 23

Vývojový nástroj make Pravidla pro překlad projektu V textové formě make pravidla načte, vyhodnotí a spustí Mezi pravidly jsou typicky závislosti Viz předchozí slajd make hledá Makefile, popř. makefile v lokálním adresáři -f mění název souboru -C mění adresář https://www.gnu.org/software/make/manual/make.html Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 8 / 23

Makefile Pravidla Příklad all : main Pravidla: cil: zavislosti Implicitně se začne vyhodnocením prvního v souboru Ale lze specifikovat na příkazové řádce: make cil Pravidla můžou mít akce, jak cil vyrobit ze zavislosti Na dalším řádku za pravidlem, odsazené tabulátorem Volá se shell Jinak se použije implicitní akce main: main.o impl.o gcc omain main.o impl.o Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 9 / 23

Úkol Hello world Makefile 1 Napište jednoduchý Makefile 2 V něm budou 3 pravidla p1, p2, p3 3 Každé vypíše své jméno 4 Každé z nich vyvolejte Z příkazové řádky 5 Nyní mezi nimi vytvořte závislosti At se vypíše po řadě p1, p2, p3 6 Nyní spust te jen samotný make Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 10 / 23

Makefile Proměnné Příklad Nastavení proměnných Na příkazové řádce V souboru: CC=gcc Reference pomocí $(...) CFLAGS= Wall all : main main: main.o impl.o $(CC) omain main.o impl.o Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 11 / 23

Úkol Proměnné v Makefile 1 Vytvořte nové pravidlo m.o 2 Bude záviset na main.c 3 Bude překládat main.c na m.o 4 Bude brát v úvahu proměnné CC a CFLAGS 5 Upravte jedno z předchozích p* pravidel, aby záviselo na m.o 6 Vyzkoušejte Zkuste předat různé CFLAGS Nezapomeňte pozměnit alespoň čas souboru (touch main.c) Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 12 / 23

Makefile Obecná pravidla Příklad % je zástupný symbol Lze psát pravidla: %.o: %.c Jak ale zjistit jména souborů? $@ jméno cíle $< jméno první závislosti $^ jména všech závislostí %.o: %.c $(CC) c o$@ $< Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 13 / 23

Úkol Obecná pravidla v Makefile 1 Vytvořte nové pravidlo k překladu z.c do.o 2 Bude brát v úvahu proměnné CC a CFLAGS 3 Kromě CFLAGS bude překládat s -W 4 Upravte jedno z předchozích p* pravidel, aby záviselo na main.o 5 Vyzkoušejte Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 14 / 23

Makefile Vnitřní příkazy Make má vnitřní příkazy $(prikaz parametry) shell command Spustí shell a vykoná v něm příkaz command wildcard pattern Expanduje pattern (* ne %) a vrací seznam patsubst pattern,replacement,text Nahrad v text všechny výskyty pattern za replacement... Příklad PATH=$(shell pwd) SOURCES=$(wildcard.c) OBJS=$(patsubst %.c,%.o,$(sources)) Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 15 / 23

Úkol Vnitřní příkazy v Makefile 1 Přeložte všechny.c (wildcard) v aktuálním adresáři do.o (patsubst) 2 Slinkujte všechny.o do jedné binárky 3 Vytvořte si 2 zdrojové soubory Jeden s funkcí main Druhý s funkcí, která je volána z main 4 Vyzkoušejte Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 16 / 23

Makefile Nevýhody Nutno popsat všechny závislosti make clean ručně Rychlost Není lineární vzhledem k počtu souborů Složitý zápis komplikovanějších pravidel Např. neexistuje explicitní podpora pro podadresáře Méně přenositelný Může být příliš upovídaný Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 17 / 23

Sekce 3 Autotools, CMake Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 18 / 23

Generátory Nadstavby nad make (a ostatními) Často generují Makefile pro make Podpora externích závislostí Je v dosahu překladač C? Umí překladač C99? Je v systému knihovna X? Máme hlavičku Y.h? Podpora podadresářů Konfigurace uživatelem Ne/chci ve výsledné binárce podporu pro X Ne/optimalizuj při překladu (ne/chci ladit)... Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 19 / 23

Nástroje Autotools Tři nástroje 1 Autoconf Vyhledání externích závislostí Konfigurace uživatelem Z popisu v configure.ac generuje skript configure http://www.gnu.org/software/autoconf/manual/ 2 Automake Popis překladu (včetně rozdělení do podadresářů) Z popisu v Makefile.am generuje Makefile.in http://www.gnu.org/software/automake/manual/ 3 Libtool Podpora pro tvorbu knihoven na různých POSIX systémech https://www.gnu.org/software/libtool/manual/ Výsledek: jeden configure a mnoho Makefile.in Uživatel spustí./configure a dostane mnoho Makefile Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 20 / 23

Překladový systém cmake Příklad Popis konfigurace a překladu v jednom Soubory CMakeLists.txt Znáte z cvičení (kontr_lessons) https://cmake.org/cmake/help/latest/ cmake_minimum_required(version 2.8.11) project (my_project) set(cmake_c_flags " std=c99 pedantic Wall Wextra") add_subdirectory(my_lib) add_executable(main main.c impl.c) target_link_libraries (main LINK_PUBLIC my_lib) Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 21 / 23

Sekce 4 Závěr Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 22 / 23

Závěr a diskuse Nepište překladové systémy na vlastní pěst Děkuji za pozornost! Dotazy? Jiri Slaby (Fakulta informatiky, MU) PB071 Překlad 2. 5. 2016 23 / 23