Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Programování pod Linuxem pro všechny

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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

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:

davame_internetu_obsah
       
# 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í.

Školení: Linux – Firewall, Samba, VPN

Na třídenním školení se naučíte nainstalovat a spravovat Firewall a Router, SAMBA Doménový a Souborový server. Dále si zprovozníte vlastní, zabezpečený VPN server.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,78

Přehled názorů

Pro všechny?
Marek Paška 23. 1. 2004 00:12
Nový
├ 
Re: Pro všechny?
Johanka the Editor 23. 1. 2004 00:53
Nový
├ 
Re: Pro všechny?
asdf 23. 1. 2004 08:56
Nový
│
├ 
Re: Pro všechny?
Drahos 23. 1. 2004 12:00
Nový
│
└ 
Re: Pro všechny?
Drahos 23. 1. 2004 12:04
Nový
│
 
└ 
Re: Pro všechny?
Petr Tesařík 23. 1. 2004 13:33
Nový
│
 
 
└ 
Re: Pro všechny?
Kocovina 27. 1. 2004 16:36
Nový
└ 
Re: Pro vsechny?
pooh 23. 1. 2004 10:20
Nový
odentrovani
Maude Lebowski 23. 1. 2004 01:14
Nový
└ 
Re: odentrovani
George007 23. 1. 2004 03:01
Nový
 
└ 
Re: odentrovani
Culibrk 23. 1. 2004 22:36
Nový
bez editoru joe ani ranu !!!
xChaos 23. 1. 2004 05:27
Nový
├ 
Re: bez editoru joe ani ranu !!!
Michal Kara 23. 1. 2004 07:15
Nový
│
└ 
Re: bez editoru joe ani ranu !!!
xChaos 12. 2. 2004 02:31
Nový
├ 
Re: bez editoru joe ani ranu !!!
sokrates 23. 1. 2004 08:44
Nový
│
└ 
Re: bez editoru joe ani ranu !!!
Mti. 23. 1. 2004 16:45
Nový
│
 
└ 
Re: bez editoru joe ani ranu !!!
Vít Heřman 23. 1. 2004 19:02
Nový
│
 
 
├ 
Re: bez editoru joe ani ranu !!!
gmmns 23. 1. 2004 20:29
Nový
│
 
 
└ 
Re: bez editoru joe ani ranu !!!
kavol 23. 1. 2004 20:39
Nový
├ 
Re: bez editoru joe ani ranu !!!
asdf 23. 1. 2004 08:53
Nový
│
├ 
Re: bez editoru joe ani ranu !!!
Tomas Dean 26. 1. 2004 09:09
Nový
│
└ 
Re: bez editoru joe ani ranu !!!
Jan Šimůnek 28. 1. 2004 14:50
Nový
│
 
└ 
Re: bez editoru joe ani ranu !!!
tsunami 27. 2. 2004 20:36
Nový
├ 
Re: bez editoru joe ani ranu !!!
Mormegil 23. 1. 2004 13:37
Nový
│
└ 
Re: bez editoru joe ani ranu !!!
xChaos 12. 2. 2004 02:28
Nový
└ 
Re: bez editoru joe ani ranu !!!
anonymní uživatel 24. 1. 2004 00:54
Nový
 
└ 
NAS*ANY UZIVATEL
tomas 27. 1. 2004 02:18
Nový
preklepy
David Brodsky 23. 1. 2004 06:19
Nový
Pro zapšklé magory:
Bacil 23. 1. 2004 06:27
Nový
└ 
Re: Pro zapšklé magory:
Pavel 23. 1. 2004 07:38
Nový
programovani v Gnome a spol.
Hunterz 23. 1. 2004 07:47
Nový
├ 
Re: programovani v Gnome a spol.
peto 23. 1. 2004 09:15
Nový
│
├ 
Re: programovani v Gnome a spol.
Michal Kara 23. 1. 2004 09:40
Nový
│
│
├ 
Re: programovani v Gnome a spol.
peto 23. 1. 2004 13:14
Nový
│
│
└ 
Re: programovani v Gnome a spol.
Vítězslav Novák 30. 4. 2004 15:58
Nový
│
└ 
Re: programovani v Gnome a spol.
Matej Zagiba 27. 1. 2004 17:12
Nový
├ 
Re: programovani v Gnome a spol.
Johanka the Editor 23. 1. 2004 10:41
Nový
├ 
programovani GUI v UNIXu pomoci Tcl/Tk
Ludvik Tesar 23. 1. 2004 14:44
Nový
│
├ 
Re: programovani GUI v UNIXu pomoci Tcl/Tk
hkmaly 23. 1. 2004 16:41
Nový
│
├ 
Re: programovani GUI v UNIXu pomoci Tcl/Tk
Petr Baudis 23. 1. 2004 17:12
Nový
│
└ 
Re: programovani GUI v UNIXu pomoci Tcl/Tk
Laszlo 23. 1. 2004 19:11
Nový
├ 
programovani GUI v UNIXu pomoci Tcl/Tk
Ludvik Tesar 23. 1. 2004 15:39
Nový
│
└ 
Re: programovani GUI v UNIXu pomoci Tcl/Tk
vrabcak 23. 1. 2004 17:51
Nový
│
 
├ 
Re: programovani GUI v UNIXu pomoci Tcl/Tk
Pavel 23. 1. 2004 20:30
Nový
│
 
│
└ 
Re: programovani GUI v UNIXu pomoci Tcl/Tk
Lubos Lunak 24. 1. 2004 11:54
Nový
│
 
│
 
└ 
Re: programovani GUI v UNIXu pomoci Tcl/Tk
gmmns 25. 1. 2004 18:34
Nový
│
 
└ 
Re: programovani GUI v UNIXu pomoci Tcl/Tk
gmmns 23. 1. 2004 20:36
Nový
├ 
Re: programovani v Gnome a spol.
Honza 23. 1. 2004 17:11
Nový
│
├ 
Aky je vlastne stav vyvojoveho prostredia pre GTK?
Martin [X] 26. 1. 2004 09:25
Nový
│
│
└ 
Re: Aky je vlastne stav vyvojoveho prostredia pre
mirco 7. 2. 2004 11:45
Nový
│
└ 
Re: programovani v Gnome a spol.
Milos 26. 1. 2004 09:53
Nový
└ 
Re: programovani v Gnome a spol.
Grumpa 25. 1. 2004 12:23
Nový
Jeste jeden parametr pro gcc...
Karel Zak 23. 1. 2004 08:08
Nový
├ 
Re: Jeste jeden parametr pro gcc...
Yeti 23. 1. 2004 08:58
Nový
│
└ 
Re: Jeste jeden parametr pro gcc...
Karel Zak 23. 1. 2004 09:04
Nový
└ 
Re: Jeste jeden parametr pro gcc...
Tomas Janousek 23. 1. 2004 23:13
Nový
Include path
muflon 23. 1. 2004 09:17
Nový
├ 
Re: Include path
sd 23. 1. 2004 09:37
Nový
│
└ 
Re: Include path
m1c4a1 23. 1. 2004 22:37
Nový
└ 
Re: Include path
Pet 23. 1. 2004 10:19
Nový
 
└ 
Re: Include path
muflon 23. 1. 2004 11:30
Nový
 
 
├ 
Re: Include path
Pet 23. 1. 2004 14:10
Nový
 
 
└ 
Re: Include path
Emil Jerabek 23. 1. 2004 14:26
Nový
programovani
neologism 23. 1. 2004 09:32
Nový
├ 
Re: programovani
sd 23. 1. 2004 09:52
Nový
└ 
Re: programovani
Petr Baudis 23. 1. 2004 17:27
Nový
thanks
Shamot 23. 1. 2004 09:32
Nový
├ 
Re: thanks
karelklic 23. 1. 2004 10:11
Nový
│
├ 
Re: thanks
Jerry III 23. 1. 2004 11:06
Nový
│
├ 
Re: thanks
Pet 23. 1. 2004 11:16
Nový
│
│
└ 
Re: thanks
Papa 23. 1. 2004 19:06
Nový
│
├ 
Re: thanks
covex 23. 1. 2004 15:08
Nový
│
├ 
Re: thanks
blami 23. 1. 2004 15:41
Nový
│
│
└ 
Re: thanks
vrabcak 23. 1. 2004 17:58
Nový
│
│
 
└ 
Souhlasi
Jan 24. 1. 2004 14:14
Nový
│
│
 
 
└ 
Re: Souhlasi
gmmns 25. 1. 2004 18:40
Nový
│
├ 
Re: thanks
venca 23. 1. 2004 22:34
Nový
│
└ 
cmake
zen master 27. 1. 2004 12:52
Nový
│
 
└ 
Re:thanks
galaxi 30. 1. 2004 19:26
Nový
└ 
Re: thanks
galaxi 23. 1. 2004 19:51
Nový
 
├ 
Re: thanks
Pavel 23. 1. 2004 20:41
Nový
 
│
├ 
Re: thanks
Krata 23. 1. 2004 23:04
Nový
 
│
└ 
Re: thanks
Josef Pavlik 23. 1. 2004 23:54
Nový
 
│
 
└ 
Re: thanks
Lubos Lunak 24. 1. 2004 11:45
Nový
 
└ 
Re: thanks
Tomas Janousek 23. 1. 2004 23:31
Nový
Emacs a makefile
Pet 23. 1. 2004 10:06
Nový
├ 
Re: Emacs a makefile
Glin 23. 1. 2004 11:25
Nový
├ 
Re: Emacs a makefile
Petr Tesařík 23. 1. 2004 13:41
Nový
└ 
VIM a makefile
Petr Baudis 23. 1. 2004 17:45
Nový
Ja bych to naflagal do KDevelop,prelozil,sl inkoval
Pavel P 23. 1. 2004 11:37
Nový
└ 
Re: Ale stejne sem si to vytiskl a jdu to zkusit
Pavel P 23. 1. 2004 11:42
Nový
make, vice libs z jednoho source
jenda 23. 1. 2004 12:40
Nový
└ 
Re: make, vice libs z jednoho source
hkmaly 23. 1. 2004 16:44
Nový
emacs
s_d 23. 1. 2004 17:22
Nový
hezky clanek :)
mt 24. 1. 2004 14:03
Nový
nepresnost?
Grumpa 25. 1. 2004 12:21
Nový
k programovani pod X
Johanka the Editor 26. 1. 2004 17:58
Nový
GUI programovanie
zen master 27. 1. 2004 19:34
Nový
gcc a java
Jan Šimůnek 28. 1. 2004 15:05
Nový
└ 
Re: gcc a java
zen master 29. 1. 2004 15:05
Nový
pomoc lamerom
uplne suchy zemiak 29. 1. 2004 02:34
Nový
├ 
Re: pomoc lamerom
Jan Šimůnek 29. 1. 2004 10:36
Nový
└ 
Re: pomoc lamerom
zen master 29. 1. 2004 11:51
Nový
 
└ 
Re: pomoc lamerom
uplne suchy zemiak 29. 1. 2004 22:17
Nový
 
 
└ 
Re: pomoc lamerom
me 8. 2. 2004 09:28
Nový
FreeBSD
Aplt 2. 2. 2004 14:42
Nový
└ 
Re: FreeBSD
ToM 5. 2. 2004 10:16
Nový
 
└ 
Re: FreeBSD
xChaos 12. 2. 2004 02:41
Nový
$PATH
Jiří Novák 20. 12. 2005 14:33
Nový
Prosim poradte!!
Cagik 11. 8. 2007 14:01
Nový
└ 
Re: Prosim poradte!!
Jan Cagan 12. 8. 2007 10:06
Nový
Dotaz
Zuben45 29. 10. 2009 22:03
Nový
└ 
Re: Dotaz
6 22. 4. 20:09
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem