Ve druhé části seriálu o integrovaných vývojových prostředích, které jsou programátorům dostupné v systému Fedora, se budeme věnovat popisu dvou IDE určených mj. i pro tvorbu aplikací s využitím kompilovaných programovacích jazyků C a C++. Prvním dnes popsaným integrovaným vývojovým prostředím je aplikace Geany a druhé prostředí se jmenuje Code::Blocks. V případě IDE Geany se zmíníme i o jednom velmi užitečném rozšiřujícím modulu nazvaném geanygdb.

Integrovaná vývojová prostředí ve Fedoře

V úvodní části seriálu o integrovaných vývojových prostředích, jehož text je dostupný na adrese http://mojefedora.cz/vyvojova-prostredi-ve-fedore-1-dil/, jsme si popsali základní požadavky kladené převážnou částí programátorů na všechna moderní IDE. Připomeňme si, že od integrovaných vývojových prostředí se dnes většinou očekává minimálně podpora pro správu projektů, vytváření a úprava zdrojových kódů (integrace vhodného programátorského textového editoru, ať již externího či interního), propojení IDE s překladačem a většinou vývojáři taktéž očekávají určitou formu spolupráce integrovaného vývojového prostředí s ladicím programem (debuggerem), tj. že například bude možné nastavovat přímo ve zdrojovém textu breakpointy, krokování a prohlížení obsahu proměnných bude prováděno přímo v IDE apod.

ide_01

Obrázek 1: Splashscreen integrovaného vývojového prostředí nazvaného Anjuta, které jsme si popsali v úvodní části tohoto seriálu. Jedná se v určitém pohledu o typické „lehké“ IDE, které však lze díky podpoře rozšiřujících modulů (pluginů) relativně jednoduše upravit takovým způsobem, aby programátorům nabízelo (tj. integrovalo) téměř všechny nástroje nutné pro vývoj.

Mezi další vlastnosti, které mohou integrovaná vývojová prostředí svým uživatelům nabízet, patří podpora pro refaktoring zdrojových kódů, porovnání dvou či více variant (verzí) zdrojového kódu, podpora pro tvorbu a aplikaci takzvaných patchů (integrace nástrojů diff a patch) a nabídka rozhraní k systémům pro správu verzí (CVS, SVN, git, Mercurial). Ve skutečnosti však nemusí být vždy nutné a dokonce ani žádoucí, aby všechna IDE skutečně nabízela veškeré funkce zmíněné v předchozím odstavci, protože někteří vývojáři mohou dát z různých důvodů přednost využití spíše jednoduššího, popř. jednostranně zaměřeného integrovaného vývojového prostředí s tím, že tato prostředí je možné v případě potřeby rozšířit pomocí rozšiřujících modulů (pluginů).

ide_02

Obrázek 2: Splashscreen multiplatformního integrovaného vývojového prostředí nazvaného Code::Blocks, které bude popsáno v navazujících kapitolách. I toto IDE v sobě integruje všechny základní vývojářské nástroje, včetně vazby na debugger.

Tento pochopitelný požadavek na svobodnou volbu vývojových nástrojů je ostatně jeden z hlavních důvodů, proč ve Fedoře (a obecně v operačním systému Linux) existují vedle univerzálních IDE typu Eclipse či NetBeans i vývojová prostředí, která mohou být specializovaná pouze na určitou oblast vývoje software. V předchozí části tohoto seriálu byla popsána dvě integrovaná vývojová prostředí: Anjuta a Qt Creator. Dnes si řekneme základní informace o IDE nazvaném Geany a taktéž o (pravděpodobně známějším) vývojovém prostředí nesoucím poněkud zvláštní jméno Code::Blocks. Opět se tedy zaměříme na aplikace určené převážně programátorům používajícím jazyky C a C++, i když ve skutečnosti lze obě zmíněná prostředí použít i společně s dalšími programovacími jazyky.

ide_03

Obrázek 3: Informace o verzi a o tvůrcích integrovaného vývojového prostředí Geany.

Integrované vývojové prostředí Geany

Na rozdíl od úvodní části tohoto seriálu nebudou dnes popisovaná integrovaná vývojová prostředí seřazena podle abecedy. Z tohoto důvodu náš přehled dalších IDE dostupných pro Fedoru začneme u vývojového prostředí nazvaného Geany. Jedná se o integrované vývojové prostředí, které je, podobně jako minule popsané IDE Anjuta, poměrně nenáročné na systémové prostředky počítače (rychlost mikroprocesoru a kapacitu operační paměti) a lze ho tak pohodlně provozovat při vývoji aplikací například i na starším notebooku vybaveném jedním gigabajtem a dokonce pouze i pouhými 512 MB operační paměti (což mám odzkoušeno).

ide_04

Obrázek 4: Pohled na grafické uživatelské rozhraní integrovaného vývojového prostředí Geany.

Geany programátorům nabízí ucelenou množinu základních funkcí očekávaných u většiny moderních IDE. V první řadě se jedná o správu projektů, které mohou využívat prakticky jakýkoli programovací jazyk či dokonce kombinaci několika programovacích jazyků – Geany totiž nabízí vývojářům možnost nastavit si pro každý projekt parametry překladu i parametry spuštění, což mj. znamená i možnost výběru konkrétního překladače a linkeru, samozřejmě včetně nabídky specifikace knihoven, které se mají použít (přilinkovat) v průběhu sestavování projektu.

ide_05

Obrázek 5: Pokud při překladu projektu dojde k chybě, dokáže Geany analyzovat chybové hlášení a červeným podtržením označit příslušnou část zdrojového kódu.

Využití šablon v IDE Geany

Dále je, podobně jako i u obou minule popsaných vývojových prostředí Anjuta a Qt Creator, možné v integrovaném vývojovém prostředí Geany vytvářet nové zdrojové soubory s využitím takzvaných šablon (templates), které slouží k vytvoření kostry zdrojového kódu. V případě některých programovacích či značkovacích jazyků se totiž určitá kostra textu opakuje v každém zdrojovém kódu, ať již se to týká dnes již prakticky nezbytné zmínky o licenci, tak i o úvodní deklarace, importy knihoven, kostru funkce/metody main atd.

ide_06

Obrázek 6: Dialog zobrazený při tvorbě nového projektu v integrovaném vývojovém prostředí Geany.

V integrovaném vývojovém prostředí Geany jsou ihned po jeho instalaci připraveny šablony určené pro nejpoužívanější překládané/kompilované programovací jazyky (do této skupiny spadá především C, C++ a Java), skriptovací jazyky (Python, Ruby, ...) a dokonce zde najdeme i několik šablon pro značkovací jazyky HTML a LaTeX, což osobně oceňuji, protože úvodních několik řádků textu (preambule) se v případě LaTeXu prakticky nikdy nemění (zrovna tuto šablonu je však nutné pro potřeby tvorby českých textů nepatrně upravit).

ide_07

Obrázek 7: Kostra programu napsaného v Pythonu, která byla vytvořená ze šablony nabízené integrovaným vývojovým prostředím Geany.

Editor implementovaný v IDE Geany

Integrované vývojové prostředí Geany je samozřejmě vybaveno i programátorským textovým editorem, který sice nemůže – alespoň co se týče nabízených funkcí – soupeřit s Vimem ani s Emacsem, ovšem pro poměrně velkou skupinu vývojářů mohou být funkce nabízené interním editorem Geany dostatečné. Tento editor samozřejmě umožňuje provádět poloautomatické formátování zdrojových textů, vyhledávání v textu apod. Navíc lze jednotlivé bloky, na něž je zdrojový text v prakticky každém programovacím jazyce hierarchicky rozčleněn, selektivně skrývat pomocí funkce fold, popř. s využitím ikon [+] a [-] zobrazených ve sloupci nalevo od zdrojového textu.

ide_08

Obrázek 8: Nastavení základních vlastností textového editoru zabudovaného do integrovaného vývojového prostředí Geany. Zajímavá je volba „Virtual spaces“, která umožní přesun kurzoru i na místo, v němž se ve skutečnosti nenachází žádný text (pravá či dolní strana obrazovky). Režim „virtuálních mezer“ byl mimochodem využíván i v mnoha programátorských editorech určených pro systém DOS (Borland Pascal atd.).

Ovšem programátorský textový editor integrovaného vývojového prostředí Geany nabízí vývojářům i mnoho dalších užitečných funkcí. Při načítání či změně zdrojového kódu se například vytvoří seznam symbolů (globálních proměnných, funkcí, metod, datových struktur), který je zobrazen v samostatném nástrojovém panelu zobrazeném nalevo od zdrojového kódu. Tímto seznamem lze procházet a přesouvat se v editoru na definici vybraného symbolu.

ide_09

Obrázek 9: Zvýraznění částí zdrojového textu, v nichž překladač našel chybu v průběhu překladu projektu.

Textový editor taktéž dokáže zobrazit nápovědu k zapisovaným funkcím (počet parametrů atd.) a při překladu se analyzují hlášení překladače a pokud došlo při překladu k chybě, je na tuto situaci uživatel upozorněn červeně podtrženou částí zdrojového textu. Zmíněné funkce editoru jsou zobrazeny na obrázcích číslo 9, 10 a 11.

ide_10

Obrázek 10: Na levé straně se nachází seznam funkcí, proměnných a struktur nalezených ve zdrojovém kódu. Editor navíc dokáže ve zdrojovém kódu zvýraznit vyhledávaný text.

ide_11

Obrázek 11: Seznam symbolů nalezených v rozsáhlejším zdrojovém kódu vytvořeném v programovacím jazyku C.

Správa projektů v integrovaném vývojovém prostředí Geany

IDE Geany samozřejmě podporuje i tvorbu a následnou práci s takzvanými projekty. Slovem „projekt“ se zde, podobně jako ve většině dalších moderních integrovaných vývojových prostředí, označuje sada zdrojových kódů, konfiguračních souborů i datových souborů (uložených většinou ve společné adresářové struktuře), které slouží pro vytvoření výsledné aplikace. Většina nastavení se provádí pro aktivní projekt jako celek, což například znamená, že změna parametrů překladu se projeví ve způsobu překladu všech zdrojových kódů zařazených do projektu. Totéž platí i pro další konfigurační volby, například pro nastavení editoru zdrojových textů atd.

ide_12

Obrázek 12: Nastavení vlastností projektu v Geany.

Informace o vytvořeném projektu jsou ukládány do samostatných textových souborů, což je výhodné, protože celý projekt je možné uložit do lokálního či vzdáleného repositáře (SVN, git, Mercurial...), projekt lze snadno přenášet na flash disku, lze mít více verzí projektu atd.

ide_13

Obrázek 13: Volby použité při překladu a linkování projektu nastavené prostředím Geany při vytvoření nového projektu.

ide_14

Obrázek 14: Volby použité při překladu a linkování projektu. Zde jsou explicitně doplněny informace o způsobu překladu céčkových zdrojových kódů (přepínač -Wall) i přepínače použité linkerem.

Přídavné moduly integrovaného vývojového prostředí Geany

Mnoho moderních aplikací podporuje rozšiřování své funkcionality s využitím přídavných modulů nazývaných plugin(s). Typickým příkladem aplikací s podporou přídavných modulů jsou webové prohlížeče (Firefox...) či již dříve popsané integrované vývojové prostředí Eclipse. Výjimkou v tomto trendu není ani vývojové prostředí Geany, které použití pluginů taktéž podporuje a dokonce jsou s využitím pluginů implementovány některé funkce, které jsou dnes vyžadovány od všech IDE (například vazba na ladicí program - debugger). Na patnáctém obrázku je zobrazen dialog s nabídkou přídavných modulů, které lze v Geany povolit a inicializovat. Předtím je však nutné provést vlastní instalaci těchto pluginů, a to s využitím správce balíčků Fedory (yum).

ide_15

Obrázek 15: Dialog zobrazující nabídku s přídavnými moduly integrovaného vývojového prostředí Geany.

Modul geanygdb aneb integrace s GDB

Mezi dva nejužitečnější přídavné moduly patří modul Tree Browser, jehož význam je zřejmý již z názvu, a taktéž modul nazvaný geanygdb. Oba moduly jsou dostupné v následujících balíčcích Fedory:

  • geany-plugins-geanygdb
  • geany-plugins-treebrowser

ide_16

Obrázek 16: Nástrojový panel použitý při komunikaci mezi integrovaným vývojovým prostředím Geany a ladicím programem (debuggerem).

Pro vývojáře je užitečný zejména modul nazvaný geanygdb, neboť s jeho využitím se do vývojového prostředí Geany může integrovat GNU Debugger (GDB). Pokud je modul geanygdb nainstalován (yum install geany-plugins-geanygdb) a následně povolen v IDE Geany, je možné využít příkazy dostupné z menu Debug a taktéž se v levé straně grafického uživatelského rozhraní objeví další záložka. Práce s debuggerem GDB je při použití geanygdb poměrně jednoduchá. Nejprve je samozřejmě nutné přeložit celou aplikaci s volbou -g, čímž se do vytvářených objektových souborů, binárních spustitelných souborů a popř. i do binárních sdílených knihoven přidají potřebné ladicí symboly (debug symbols).

ide_17

Obrázek 17: Inicializace ladicího programu.

Následně je možné v záložce Debug zobrazené v levé části grafického uživatelského rozhraní vybrat tlačítko [Load], čímž dojde k načtení binárního spustitelného souboru aplikace do ladicího programu. Textové pole zobrazené nad všemi tlačítky by mělo v případě úspěšného načtení obsahovat text „loaded“ a současně by se měly zpřístupnit další tlačítka, zejména [Run], [Watches] a [Break].

ide_18

Obrázek 18: Laděný program se právě zastavil na breakpointu.

Při ladění lze do programu přidávat (registrovat) breakpointy sloužící v nejjednodušším případě k zastavení procesu na určeném řádku. Ve skutečnosti jsou ale možnosti breakpointů mnohem větší, protože lze například zvolit podmínku, při jejímž dodržení dojde k zastavení programu, taktéž lze zvolit, až po kolika průchodech breakpointem dojde k zastavení apod. Všechna nastavení se provádí přímo z grafického uživatelského rozhraní IDE Geany, což je ostatně patrné i při pohledu na screenshoty 18 až 20.

ide_19

Obrázek 19: Registrace nového breakpointu.

ide_20

Obrázek 20: Seznam všech nastavených breakpointů.

Kromě nastavování breakpointů je samozřejmě možné provádět i krokování po jednotlivých příkazech, zjišťovat obsah zásobníkových rámců (tj. hodnoty parametrů funkcí i jejich lokálních proměnných), sledovat hodnoty vybraných proměnných apod. S trochou nadsázky je dokonce možné říci, že teprve po instalaci modulu geanygdb se z Geany stává skutečně plnohodnotné integrované vývojové prostředí, které může směle konkurovat ostatním v tomto seriálu popisovaným IDE.

ide_21

Obrázek 21: Výpis obsahu zásobníkového rámce.

ide_22

Obrázek 22: Výpis obsahu zásobníkového rámce.

Integrované vývojové prostředí Code::Blocks

Ve druhé části dnešního článku se budeme věnovat „konkurenčnímu“ (jestli se vůbec o skutečné konkurenci dá v případě open source projektů mluvit) integrovanému vývojovému prostředí nazvanému poněkud zvláštně Code::Blocks. Ve skutečnosti není název tohoto prostředí příliš výstřední, jak by se možná mohlo na první pohled zdát, protože (a to zcela správně) programátorům i dalším uživatelům naznačuje, že se původně jednalo o integrované vývojové prostředí určené primárně pro tvorbu aplikací s využitím programovacího jazyka C++, v němž má dvojice znaků :: (takzvaná „čtyřtečka“) svůj význam. V současnosti je ovšem možné vývojové prostředí Code::Blocks využít i pro práci s projekty založenými na dalších programovacích jazycích, i když propojení s jazyky C a C++ je stále nejpropracovanější.

ide_23

Obrázek 23: Dialog se základními informacemi o integrovaném vývojovém prostředí Code::Blocks.

Code::Blocks patří mezi multiplatformní integrovaná vývojová prostředí, přičemž přenositelnost na různé operační systémy je zaručena mj. i použitím knihovny wxWidgets (dříve se tato knihovna jmenovala wxWindows) pro implementaci svého grafického uživatelského rozhraní (tato knihovna používá nativní grafické komponenty - widgety). Navíc se jedná o vývojový nástroj, který lze velmi jednoduše, tj. s minimálními zásahy do jeho konfigurace, využít společně s velkým množstvím různých překladačů a linkerů. Code::Blocks totiž dokáže po svém spuštění nalézt, rozpoznat a následně vypsat většinu nainstalovaných překladačů (včetně crosscompilerů), s kterými může přímo spolupracovat (viz též obrázek číslo 24). Nově vytvářené projekty jsou pak upraveny takovým způsobem, aby bylo možné provést jejich překlad s využitím zvoleného překladače.

ide_24

Obrázek 24: Toto IDE dokáže samo rozpoznat a vypsat nainstalované překladače, které lze následně použít při vývoji, tj. při práci v projektech otevřených v Code::Blocks.

Šablony v IDE Code::Blocks

Již několikrát jsme se v tomto seriálu zmínili o šablonách nabízených integrovanými vývojovými prostředími pro zjednodušenou tvorbu nových projektů a popř. i jednotlivých zdrojových souborů, které jsou součástí těchto projektů. Šablony jsou samozřejmě podporovány i ve vývojovém prostředí Code::Blocks, a to dokonce ve větším množství, než je tomu v dalších doposud popisovaných IDE. Při tvorbě nového projektu je možné si zvolit, o jaký typ projektu se jedná. Programátor může například chtít vytvořit jednoduchou konzolovou aplikaci, grafickou aplikaci využívající kombinaci knihoven OpenGL a GLUT, aplikaci s plnohodnotným grafickým uživatelským rozhraním implementovaným s použitím GTK+, Qt, FLTK či wxWidgets/wxWindows atd. atd. Pro tyto typy aplikací existuje již v základní instalaci příslušná šablona.

ide_25

Obrázek 25: Šablony, které jsou programátorům dostupné po standardní instalaci integrovaného vývojového prostředí Code::Blocks.

Správa projektů

Po výběru šablony je zobrazena sekvence dialogů, v nichž je možné specifikovat popř. upravit parametry překladu a linkování projektu, zvolit umístění zdrojových souborů i souborů, které jsou výsledkem překladu v adresářové struktuře, vybrat překladač používaný pro překlad projektu apod. Ve většině případů bude projekt vytvořený s využitím zvolené šablony obsahovat jak všechny potřebné příkazy pro překlad, tak i jeden zdrojový kód či větší množství zdrojových souborů s jednoduchým „demem“, které bude možné ihned po vytvoření projektu přeložit a spustit.

ide_26

Obrázek 26: Průvodce vytvořením nového projektu (první krok).

Na snímcích 26 až 30 je ukázáno, jakým způsobem se v prostředí Code::Blocks v několika krocích vytvořil nový projekt založený na programovacím jazyku C a na multimediální a herní knihovně SDL (Simple DirectMedia Layer). Na tomto místě je vhodné poznamenat, že většinu parametrů projektu nebylo nutné změnit – postačilo zvolit oblíbenou metodu [Next]->[Next]->[Next]->[Finish] 🙂

ide_27

Obrázek 27: Průvodce vytvořením nového projektu (druhý krok).

ide_28

Obrázek 28: Průvodce vytvořením nového projektu (třetí krok).

ide_29

Obrázek 29: Nastavení projektu.

ide_30

Obrázek 30: Další možnosti nastavení projektu.

Editor implementovaný v IDE Code::Blocks

Samostatnou kapitolu je nutné věnovat i programátorskému textovému editoru, který je součástí integrovaného vývojového prostředí Code::Blocks. Kromě běžných editačních operací (výběr textu, práce se schránkou, vyhledávání a nahrazování...) podporuje tento programátorský editor i formátování (například změnu odsazení) zdrojových kódů na základě nastavení provedeného v samostatném dialogu (obrázek číslo 32). Dále je pak možné skrývat vybrané bloky kódu (jde o již několikrát zmíněnou funkci folding), v samostatném podokně lze zobrazit symboly, tj. funkce, datové typy a proměnné, použité ve zdrojových kódech a přímo v integrovaném editoru lze taktéž nastavovat breakpointy, které budou použité při ladění a krokování vytvářeného programu.

ide_31

Obrázek 31: Nastavení zkratek, které lze použít pro zrychlení zápisu zdrojového kódu.

Programátorský editor zabudovaný do vývojového prostředí Code::Blocks podporuje definici i používání zkratek (abbreviations), s jejichž využitím lze do zdrojového kódu rychle (jen zápisem sekvence skládající se z několika znaků) zapisovat ustálené úryvky kódu. Na obrázku číslo 31 je ukázána definice zkratky navázané na sekvenci znaků „ife“. Tato znaková sekvence je po svém zápisu expandována na pětiřádkový příkaz typu if-then-else., v tomto konkrétním případě odpovídajícímu syntaxi programovacího jazyka C, C++ a Java (tvorba podobné zkratky pro jiné programovací jazyky je však velmi jednoduchá). Kromě expanze zapisovaného textu se navíc textový kurzor přesune na zvolenou pozici, což vede k dalšímu urychlení tvorby zdrojového kódu.

ide_32

Obrázek 32: Nastavení stylu odsazení v samostatném dialogu.

Velmi užitečná je i možnost nastavení či změny klávesových zkratek v celém vývojovém prostředí (klávesové zkratky – shortcuts – ve skutečnosti ovšem nemají mnoho společného se zkratkami – abbreviations – popsanými v předchozím odstavci). To znamená, že pokud programátorovi například nevyhovuje, že se nový soubor otevírá klávesovou zkratkou [Ctrl+O], může příslušnému příkazu pro otevření souboru jednoduše přiřadit odlišnou klávesovou zkratku.

ide_33

Obrázek 33: V Code::Blocks je možné v případě potřeby kompletně předeklarovat i klávesové zkratky.

Integrace Code::Blocks s debuggerem

V integrovaném vývojovém prostředí Code::Blocks mají programátoři k dispozici i modul zajišťující propojení tohoto IDE s ladicími nástroji (debuggery). V porovnání s výše popsaným prostředím Geany a jeho modulem geanygdb je integrace Code::Blocks s debuggery mnohem lepší, což je ostatně patrné i při pohledu na snímky zobrazené na obrázcích číslo 34 až 37.

ide_34

Obrázek 34: Toolbar se základními příkazy používanými v ladicím nástroji (debuggeru).

Základem při práci s debuggerem je nastavení breakpointů, které se, jak je v moderních IDE zvykem, mohou registrovat přímo v integrovaném textovém editoru. Ve chvíli, kdy je projekt přeložen s přidáním ladicích informací (volba -g), je možné z menu Debug spustit debugger, jehož zprávy jsou vypisovány do samostatného podokna nazvaného „Debugger“. Kromě toho mají programátoři k dispozici i další podokna, v nichž lze zobrazit například informace o zásobníkových rámcích (historii volaných metod/funkcí a jejich parametrů), obsah části operační paměti či obsah registrů mikroprocesoru.

ide_35

Obrázek 35: Nastavení breakpointu.

ide_36

Obrázek 36: Vstup na breakpoint.

Další nástroje nabízené prostředím Code::Blocks

V integrovaném vývojovém prostředí Code::Blocks nalezneme i mnoho dalších nástrojů a funkcí, které mohou urychlit a popř. i zjednodušit vývoj určitých typů aplikací. Jedná se například o napojení na známý nástroj Valgrind, který lze použít pro detekci těch částí kódu, které nekorektně pracují s pamětí, popř. pro profilování aplikací. V Code::Blocks dokonce nalezneme i poměrně propracovaný návrhář grafického uživatelského rozhraní, jenž je zaměřený na knihovnu wxWidgets/wxWindows. O tomto návrháři se zmíníme i v následující části seriálu, v níž se budeme mj. zabývat i popisem integrovaného vývojového prostředí KDevelop.

ide_37

Obrázek 37: Code::Blocks - zobrazení informací o zásobníkových rámcích, aktuálním obsahu registrů mikroprocesoru i o strojovém kódu, do něhož byla přeložena funkce main().