Hlavní navigace

Programování pod Linuxem pro všechny

Jakub Matys

Na ROOTu se nachází mnoho článků zabývajících se programováním, ale většina se zabývá jen určitým problémem a nevšiml jsem si článku, který by byl pro lidi, kteří přešli na Linux včera a chtějí se naučit nějaké "fígle". Rozhodl jsem se tedy napsat sérii takovýchto článků sám. Měla by vás naučit psát programy, které budou funkční a budou opravdu "něco dělat". Předpokládám, že máte nějaké zkušenosti s C. Tak se pusťme do prvního dílu.

Editace zdrojových souborů

První věcí, kterou bychom se měli naučit, je překládání zdrojových souborů. Než však přeložíme první program, řekneme si něco o editačním programu Emacs. Samozřejmě, že nikoho nenutím, aby používal právě Emacs, ale poklám ho za velice zdařilý program k editaci veškerého textu.

Otevření souboru se zdrojovým kódem

Editor Emacs můžete spustit, jak z terminálového okna příkazem emacs, tak kliknutím na příslušnou nabídku/ikonu v X-Windows. Kliknutím na nabídku File-Open File… se v dolní části zobrazí kurzor a vy můžete napsat cestu k souboru. Pokud máte spuštěn Emacs v terminálu, zpřístupníte nabídku klávesou F10.

Automatické formátování textu a zvýraznění syntaxe

Emacs umožňuje automatické formátování textu, co to znamená? Pokud napíšete nějaký příkaz, „odenterujete“ a stisknete TAB, Emacs správně odsadí od kraje. To je velice výhodné, protože kód je přehledný a navíc máte kontrolu, že jste neudělali chybu.

Další věcí, která velice zpřehledňuje kód, je zvýraznění syntaxe. Jde o to, že text bude barevně rozdělen, například klíčová slova mohou být zobrazena jednou barvou, předdefinované typy jinou a komentáře mohou mít opět jinou barvu. Pokud chcete zvýraznění syntaxe zapnout, vytvořte soubor .emacs ve vašem domovském adresáři a zapište do něj:

(global-font-lock-mode t)

Uložte soubor, ukončete editor a znovu jej spusťte. A nyní se můžete kochat barvami.

Překlad zdrojového souboru pomocí GCC

Překladač je program, který překládá zdrojový kód na kód, jemuž počítač „rozumí“ a „umí“ jej spustit. V Linuxu se nejčastěji používá překladač GCC, který umí překládat zdrojové kódy jazyků C, C++, Java, Objective-C, Fortran… Nyní si předvedeme na ukázkovém programu různé volby překladače.

Hello.c:

#include <stdio.h>

main()
{
     printf("Hello world");
}

Myslím, že tento program zná každý :-)

Pro překlad programu zadejte gcc main.c. Pokud jste v programu neudělali žádný překlep, objeví se v adresáři soubor a.out, což je spustitelný program, který můžete libovolně přejmenovat. Jestliže se v průběhu kompilace objevil nějaký výpis, pozorně si jej přečtěte, protože obsahuje důležité informace (nejčastěji chyby, které jste udělali). Že umíte přeložit program, je sice moc hezké, ale kdo by se pořád přepisoval s názvem. Zkuste spustit kompilaci s přepínačem -o a názvem souboru: gcc -o main main.c. A co se nestalo, místo programu a.out je na jeho místě program main.

Co když se však bude program skládat z více souborů(nemyslím soubory .h, ale soubory .c)? V tomto případě nám pomůže přepínač -c. Pomocí něj se nevytvoří spustitelný soubor, ale přemístitelný soubor, tj. soubor, který sice obsahuje část programu, ale není ještě „slinkovaný“. Spuštěním příkazu gcc -c main.c vznikne soubor main.o. A pokud bychom měli další část programu také jako přemístitelný soubor, můžeme je spojit příkazem gcc -o main main.o soubor.o.

Při použití hlavičkových souborů GCC prohledává adresáře se systémovými hlavičkovými soubory (většinou /usr/include,

/usr/local/include a jiné). Pokud si vytvoříte vlastní hlavičkové soubory, nemusíte je kopírovat do /usr/include, ale stačí uvést přepínač -I při překladu. Volba -I říká překladači, v jakém adresáři má hledat hlavičkové soubory. Např. gcc -I ./include main.c.

V některých případech budete chtít zadat z příkazového řádku makro. Umožní to volba -D. Například budete chtít zapnout ladící volby programu: gcc -c -D DEBUG main.c či gcc -c -D DEBUG=2 main.c.

Až budete překládat finální verzi programu, pravděpodobně budete chtít, aby „běžel“ co nejrychleji. Pro tento případ zadejte na příkazový řádek volbu optimalizace -O2 (GCC má několik úrovní optimalizace, viz man gcc): gcc -c -O2 main.c.

Pokud používáte funkce, které nejsou ve standardní knihovně C, budete muset použít volbu -l. Všechny knihovny mají v názvu předponu lib. Pokud je přidáte do svého překladu, nemusíte tuto předponu vpisovat, překladač to udělá za vás. Stejně tak nemusíte psát přípony pro knihovny (.a, .so). Např. gcc -c main.c -lm, přidá do vašeho programu funkce z matematické knihovny. Stejně jako u hlavičkových souborů i u knihoven se prohledávají určité adresáře(/lib a /usr/lib). Pokud má překladač vyhledávat v jiných adresářích, uveďte je za volbou -L. Pokud máte své knihovny v adresáři, odkud spouštíte kompilaci, musíte uvést volbu -L., protože GCC neprohledává aktuální adresář.

Automatický překlad pomocí GNU Make

Budete-li překládat nějaký větší program, pravděpodobně nebudete překládat každý zdrojový soubor do přenositelného kódu a posléze je spojovat a kopírovat do určeného adresáře ručně. Pro tento účel byl vytvořen GNU Make. Základní idea programu Make je jednoduchá, programu je třeba říci, jaký cíl (target) se má sestavit a jaká pravidla (rules) pro jeho sestavení platí. Také je nutné specifikovat tzv. závislosti (dependencies), jež indikují, za jakých podmínek se má konkrétní cíl sestavit.

Pokud budeme mít program o dvou souborech program.c a výpočty.c, budou tři cíle: program.o, výpočty.oa program(.exe;)). Když si uvědomíte, jaké příkazy jste použili ke kompilaci kódu, bude vám jasné, jaká pravidla máte použít. Specifikace závislostí je poněkud komplikovanější, je zřejmé, že program závisí na program.c a výpočty.c. Dále je důležité, že program.o a výpočty.o je nutné vytvořit pokaždé, když se změní příslušný soubor. Zpravidla se také specifikuje cíl zvaný clean, jenž má za úkol odstranit generované přemístitelné kódy a samotné sestavené programy, aby bylo možné sestavovat vše od začátku. Cíle, pravidla a závislosti se definují v souboru Makefile.

Ukázkový soubor Makefile:

program: program.o výpočty.o
     gcc $(CFLAGS) -o program program.o výpočty.o
program.o: program.c
     gcc $(CFLAGS) -c program.c
výpočty.o: výpočty.c
     gcc $(CFLAGS) -c výpočty.c

clean:
     rm -f *.o program

Proměnná CFLAGS slouží k dodatečnému předávání parametů překladači, např. make GFLAGS=-g. Nyní můžete zadat v shellu:

# make

a na obrazovce uvidíte tento výstup:

# make
gcc -c program.c
gcc -c výpočty.c
gcc -o program program.o výpočty.o

Pokud nyní změníte nějaký výše uvedený soubor, make bude překládat jen soubory, které přímo závisejí na tomto souboru. Např. pokud změníte soubor výpočty.c, bude výstup make vypadat takto:

# make
gcc -c výpočty.c
gcc -o program program.o výpočty.o

# make clean
rm -f *.o program

Ještě bych chtěl upozornit, že pravidla se musí oddělit od začátku řádku tabulátorem.

V příštím dílu budeme už konečně programovat. Ukážeme s,i jak používat funkci getopt_long, řekneme si něco o systémových a uživatelských proměnných, vytváření dočasných souborů a bezpečném programování.

Našli jste v článku chybu?

22. 4. 2012 20:09

6 (neregistrovaný)

Do terminálu (konsole). V gnome je gnome-terminal (klávesová zkratka ctrl + alt + T). V KDE je tusim konsole. Jinde to bude jiná emulace terminálu (xterm atd.. ). Předpokládám, že máte Xka, tak prostě hledat v menu..

29. 10. 2009 22:03

Zuben45 (neregistrovaný)

Dobrý den , jsem uplný začátečník a potřeboval bych se zeptat , kam se píše to gcc main.c ? díky moc

DigiZone.cz: R2B2 a Hybrid uzavřely partnerství

R2B2 a Hybrid uzavřely partnerství

Vitalia.cz: 7 originálních adventních kalendářů pro mlsné

7 originálních adventních kalendářů pro mlsné

120na80.cz: Rovnátka, která nejsou vidět

Rovnátka, která nejsou vidět

120na80.cz: Boreliózu nelze žádným testem prokázat

Boreliózu nelze žádným testem prokázat

Měšec.cz: Za palivo zaplatíte mobilem (TEST)

Za palivo zaplatíte mobilem (TEST)

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Lupa.cz: Obchod budoucnosti je bez front, košíků i pokladen

Obchod budoucnosti je bez front, košíků i pokladen

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Podnikatel.cz: E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

DigiZone.cz: Ohrozí Freedom TV přechodové sítě?

Ohrozí Freedom TV přechodové sítě?

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu