Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

1. Nástroje - git, make

Verzovací systém Git

Cílem cvičení je seznámit se s nástroji, které usnadní vývoj větších projektů: verzovací systém git a sestavovací program make.

Úkoly

V následujících bodech se řiďte návodem Instalace a nastavení GITu.

  1. Nainstalujte si GIT klienta.
  2. Vytvořte SSH klíč.
  3. Přihlašte se do Gitlabu a vložte veřejný klíč.
  4. Nakonfigurujte globální vlastnosti vašeho GIT klienta

Pro porobnější seznámení s Gitem doporučujeme knihu Pro Git, kterou napsal Scott Chacon (webová verze v české verzi) a knižně ji v češtině vydal CZ.NIC (pdf).

Řízený překlad - make

Cílem cvičení je naučit se automatizovat překlad a sestavení (linkování) větších projektů, kde např. existují závislosti (tj. je nutné program překládat v určitém pořadí, které však není bez hlubšího zkoumání zjevné. Budeme používat GNU Make.

Program make se řídí pravidly definovanými v textovém souboru, který se nejčastěji jmenuje makefile nebo Makefile. Pokud se předpis pro sestavování cílů jmenuje jinak, lze ho předat make s parametrem -f.

Pravidla (rules)

Pravidlo definuje, co je potřeba a jakým postupem se dojde k vytvoření daného cíle (objektový soubor, …)

myprog: myprog.c module.c
    gcc myprog.c module.c -o myprog

Konvence: před příkazem je tabulátor, posloupnost příkazů končí prázdnou řádkou.

Pro každý cíl by mělo být definováno právě jedno pravidlo, ale existují výjimky:

target1: file1.c file2.c file3.c

target1: file4.c file5.c file6.c
    gcc -c $^
    

$^ je automatická proměnná, která v tomto případě reprezentuje seznam závislostí s mezerami mezi jednotlivými jmény. Je-li jeden cíl definován více pravidly, tak jen jedno pravidlo obsahuje příkazovou část.

Explicitní pravidla definují splnění konkrétního cíle

main: main.c model.c data.c
    gcc $^ -o $@

$@ je automatická proměnná, která reprezentuje úplný název cíle.

Implicitní pravidla jsou obecná pravidla, která definují, jak vznikají celé množiny cílů (soubory určitého typu, daného příponou)

.c.o:
    gcc -c $<

Cíle (targets)

Cíl (pokud není symbolický) určuje, co je výsledkem příslušného pravidla. V makefile může být více cílů, nesmí být pojmenovány shodně.

app: main.o model.o data.o
    gcc $^ -o app

model.o: model.c
    gcc -c $^

Je-li v seznamu závislostí soubor, který v souborovém systému neexistuje, aplikuje se pravidlo, které ho vytvoří.

Symbolický cíl umožňuje vykonat několik akcí současně. Musí mít jedinečné jméno, tj. v aktuálním adresáři nesmí existovat soubor toho jména.

all: app.exe install.exe

app.exe: main.o gui.o engine.o
    gcc $^ -o $@ -lm
    
install.exe: install.o diskio.o
    gcc $^ -o $@

Makra

Makra rozšiřují možnosti make o definici konstant.

SRCEXT=.c
SOURCES=module1.c module2.c module3.c
OPTIONS=-lm -O2

Makro lze definovat i při volání make, podobně jako při překladu:

make -DSOURCES="main.c gui.c"

Pokud je stejné makro použito i v makefile, je použito přednostně.

Příklady:

CFLAGS=-lm
INCL=defs.h consts.h

.c.o:
    $(CC) -c $(CFLAGS) $(INCL) $<

Někdy se může hodit také označení některého cíle jako .PHONY. Toto klíčové slovo je primárně určeno pro cíle, jejich produktem není soubor, ale lze jej využit i pro vynucení překladu.

.PHONY app

app: app.c
    $(CC) $^ -o $@

courses/b2b99ppc/tutorials/01.txt · Last modified: 2021/02/24 10:29 by viteks