Jak na plugin CDT - C/C++ Development Tool pro Eclipse

pod Linuxem a Windows XP

Zpracoval: Vašek Mikolášek, 20.3.2005
Vedoucí projektu, korektury, závěrečná revize: Pavel Herout
Korektury, kontrola věcné správnosti, kontrola verzí: Marek Horák


Použité verze ke dni 9.5.2005: Od 9.11.2006 můžete použít zjednodušenou instalaci popsanou na:
http://eclipse.zvestov.cz/
Děkuji panu Luboši Račanskému.

Eclipse je platforma určená k vývoji jakýchkoliv integrovaných vývojových prostředí (IDE). Projekt eclipse.org zahrnuje všechny firmy, výrobce a teamy spolupracující na vývoji tohoto prostředí. Mezi nejvýznamější či nejznámější patří například IBM či Borland. Přestože u základů stály zejména firmy známé z komerční sféry IT průmyslu, stal se Eclipse open source projektem, který má bohatou historii a zdá se, že i slibnou budoucnost. Například firma IBM vytvořila úspěšný produkt Web Sphere Studio, který je postaven právě na platformě Eclipse.

S Eclipse se nejspíše setkáte v podobě tzv. SDK, tedy Software Development Kitu, což je balíček složený ze tří základních kamenů: Eclipse Platform, JDT - Java Development Kit a PDE - Plugin Development Kit (každý z nich samostaný a samostatně stáhnutelný). Eclipse SDK je zdarma a můžete si jej stáhnout ze stránek konsorcia eclipse.org. Balík SDK je rozšířitelný díky možnosti přiinstalovat různé moduly, chcete-li pluginy, a tak můžete pod jedním prostředím programovat v Javě, v C nebo C++ či třeba modelovat v UML. Záleží pro který rozšiřující modul se rozhodnete. V tomto článku se zaměřím na plugin CDT - C/C++ Development Tool, poskytující vývojové prostředí pro jazyk C a C++.

 

 

Úvod

C/C++ Development Tool (CDT) projekt se snaží poskytnout plnohodnotný a funkčně úplný C a C++ IDE pro Eclipse. Současná verze CDT nabízí tyto prostředky (opsané ze stránek projektu):

Následující odstavce tohoto článku se snaží popsat instalaci pluginu a jeho základní funkcionalitu. Pokrývají téměř všechny předchozí body a upozorňují na různé záludnosti, které se během testování vyskytly.

V první části bude popsána instalace CDT pod Linuxem a Windows XP. Ve druhé pak na malém příkladu uvidíte to nejpodstatnější, co uplatníte při návrhu aplikace pomocí CDT. Cílem článku není podat podrobný návod užití CDT, ale spíše pomoci čtenáři zorientovat se v novém prostředí. Pokud čtenář nenajde odpověď na své otázky a problémy zde, má možnost podívat se na FAQ k pluginu CDT, nebo přímo na stránky projektu, kde má velkou šanci doklikat se pomoci.

 

I. Část - Instalace CDT

Hned na začátku jedna trochu nepříjemná zpráva. Debugging s CDT 2.1 pod Eclipse 3.1 nefunguje. V nadcházející verzi CDT 2.1.1 bude tento bug opraven. Zatím však, chcete-li využívat CDT plně, včetně debuggeru, je nutné mít verzi Eclipse 3.0.x.

Eclipse využívá Java VM, proto jsou pluginy pro Eclipse plně přenositelné. Nicméně určité pluginy, což je i případ CDT, či JDT (Java Development Tool) a jiných, předpokládají, že na svém počítači již máte nainstalovány nástroje pro překlad, sestavení, spouštění apod. S tím mohou být jisté komplikace, proto bude v první části článku popsáno zprovoznění CDT v závislosti na systému. Až bude vše připraveno a nainstalováno, už by se neměly objevit žádné podstatné rozdíly plynoucí z odlišnosti systémů.

První krok - instalace pluginu do Eclipse je však stejný na jakémkoliv systému. Uživatel má v zásadě dvě možnosti:

V dalším textu budeme používat znak '~' jako zástupce pro adresu, kam jsme nainstalovali Eclipse. Ve Windows to bude nejspíše C:\Program Files\Eclipse, v Linuxu zpravidla /usr/share/eclipse. A pro oddělení adresářů se podržíme Unixové konvence a budeme používat '/'.

  1. Stáhnout si plugin jako jeden soubor a rozbalit jej do adresáře ~/plugins
  2. V menu Eclipse Help->Sotware Updates->Find and Install vybrat volbu Search for new features to install. Na další obrazovce pak klikněte na tlačítko New Remote Site a v následující výzvě zadejte jako URL:
    http://update.eclipse.org/tools/cdt/releases/new
    a jako jméno CDT. Po stlačení OK vyberte požadovanou verzi pluginu a pokračujte tlačítkem Next. V dalším okně zvolte druh balíčku (vyberte jak Tool, tak i Tooling SDK a ujistěte se, že jsou oba stejné verze). Dále se řiďte pokyny na obrazovce. Na závěr Eclipse restartujte.

1.1 Zprovoznění CDT pod Linuxem

Zprovoznění pluginu CDT pod Linuxem je prakticky bezproblémové. Předpokladem jsou pouze nainstalové balíčky:
GNU Binutils, GNU GCC a GNU make, které jsou ovšem k dispozici snad u každé distribuce Linuxu. Po absolvování instalace popsané v předešlém odstavci by tedy CDT měl být ihned plně funkční. Pokud se přesto vyskytnou problémy, o kterých se zde nezmiňujeme, konzultujte je s FAQ k pluginu CDT.

1.2 Zprovoznění CDT pod Windows XP

Plugin CDT s sebou nepřináší žádný konkrétní nástroj k sestavení, překladu či debugování programu, ale spoléhá na to, že máte již nějaký takový k dispozici na svém systému. Máte tedy volnost a můžete použít libovolný nástroj, který vám vyhovuje. Na druhou stranu, pokud žádný nástroj nemáte, neobejdete bez jeho dodatečné instalace.

CDT potřebuje zejména nějaké "windowsovské" ekvivalenty nástrojů jako GNU Binutils, GNU GCC a GNU make. Pokud je máte k dispozici stačí jen Eclipse (konkrétně CDT plugin) nakonfigurovat tak, aby je používal. (Používáte-li Visual Studio, kde jsou podobné programy k dispozici, lze využít i je. Zde najdete návod)

My budeme dále uvažovat, že nástroje pro překlad jazyka C dosud nemáte nainstalovány, a popíšeme si instalaci "free" nástrojů MinGW a MinSYS. Tyto programy vám poskytnou nástroje pro práci s jazykem C a navíc i základní příkazy známé z Linuxu (rm, ls,...), které je možné spouštět přímo z příkazové řádky Windows.

1.2.1 Instalace MinGW a MinSYS
Doporučený postup je nejprve nainstalovat MinGW, protože MinSYS se při své "postinstalalci" dotazuje, zda máte MinGW nainstalováno.

MinGW

  1. Stáhněte si MinGW. Z těch mnoha voleb, které na této stránce uvidíte, se zdá být nejjednodušší, zcela postačující a funkční instalace "všechno v jednom", která má prozaický název MinGW a najdeme ji v tabulce File List pod částí Current. Jde o soubor MinGW-<cislo verze>.exe.

  2. Nainstalujte MinGW do libovolného adresáře (V našem případě to bude C:\install\MinGW\). Řiďte se pokyny průvodce instalací.

    Poznámka:
    Může se stát, že se při instalaci MinGW nenainstaluje gdb. (Nevíme proč, ale při pokusných instalacích se v jednom případě tento problém objevil.)
    Pak stačí ze stránek projektu MinGW stáhnout samostatný balíček pro gdb ze stejné stránky jako MinGW se jménem gdb-cislo_verze.exe.
    Po instalaci (zeptá se na cestu, kde je nainstalován MinGW) už v Eclipse by mělo vše fungovat jak má včetně debuggingu.

  3. Do systémové proměnné Path přidejte cestu C:\install\MinGW\bin. Postup:
    Krok 1. V ovládacích panelech zvolte Systém a záložku Upřesnit a pokračujte tlačítkem Proměnné prostředí.
    Krok 2 Vyberte systémovou proměnnou Path a zvolte Upravit.
                Pozor! Cestu je potřeba nastavit v systémové proměnné, nikoliv v uživatelské.
    Krok 3 Na konec řetězce z Path přidejte středník a cestu k adresáři C:\install\MinGW\bin a potvrďte.

MinSYS

  1. Stáhněte si MinSYS. Instalace má název MSYS. Najdete ji v tabulce File List pod částí Current. Jde o soubor MSYS-<cislo verze>.exe.

  2. Nainstalujte MinSYS do libovolného adresáře (V našem případě to bude C:\install\MinSYS\). Řiďte se pokyny průvodce instalací.

  3. Máte-li zájem využívat MinSYS i jinak, než přes Eclipse (například simulované prostředí Linuxu), doporučujeme projít také postinstalací (spustí se po dokončení hlavní instalace sama), kde je třeba zadat adresu, kam jste nainstalovali MinGW.

  4. Stejně jako v příapdě MinGW, je třeba přidat cestu C:\install\MinGW\bin do systémové proměnné Path.
V podadresářích \bin obou nainstalovaných programů (pro nás C:\install\MinGW\bin a C:\install\MinSYS\bin) jsou k dispozici všechny potřebné programy zmíněné výše. Malý háček, se kterým si hned poradíme, je, že program make (součást MinGW) je zde pod jménem mingw32-make.exe. Z našeho pohledu (i s pohledu standardního uživatele MinGW) by bylo vhodnější, aby se jmenoval pouze make.exe. Kopii souboru získáme například příkazem z konzole:
	copy mingw32-make.exe make.exe

Poznámka: Pozor! Pokud vytvoříte make.exe ještě před instalací MinSYS, tak on vám jej při instalaci zase přejmenuje na mingw32-make.exe.

V tuto chvíli byste měli mít všechny potřebné programy nainstalovány a dostupné přímo z příkazové řádky. Zkuste do konzole napsat příkaz make a například ještě ls a pokud vám systém ani v jednom případě nehlásí, že uvedený soubor či program nemohl nalézt, máte vyhráno.

Poznámka: MinGW se ukázalo jako lepší volba než Cygwin, protože programy přeložené pomocí MinGW lze ve Windows rovnou spouštět, narozdíl od Cygwinu, kde je nutné spouštět programy pod jeho prostředím (v Cygwinu je sice možnost použít při překladu přepínač --mno-cygwin, ale to pro začátečníky není příliš elegantní řešení).

 

II. Část - První projekt

Ve druhé části tohoto tutoriálu si ukážeme, jak vytvořit projekt, jak jej překládat, spouštět a ladit debuggerem. Přestože budou popisovány základní věci, i zkušenější uživatelé zde mohou nalézt několik užitečných informací. Například zda vytvořit Standard Make Project, nebo Managed Make Project, jak předat své aplikaci parametry apod.

Celý postup, od vytvoření projektu, přes překlad až po spuštění, si ukážeme na jednoduchém programu typu Hello World. O debuggingu se dozvíte na konci této kapitoly.

2.1 Nový projekt

Standardně, jako ve většině vývojových prostředí, je i u CDT nutné založit projekt před tím, než začnete psát program. Nový projekt založíte úplně stejně, jako jste to již dělali předtím pro Javu. Volbou File->New->Project spustíte dialogové okno, kde ihned vidíte důkaz, zda jste CDT úspěšně nainstalovali. V tomto okně máte teď nově možnost zvolit si C nebo C++ projekt. Rozbalte menu pod C a uvidíte, že máte dvě volby. Jednak Managed Make Project a Standard Make Project.

  • Managed Make Project je vhodný, pokud se nechcete starat o tvorbu makefile a přenecháte tuto práci CDT.
    Poznámka: Máte-li dle doporučení nainstalováno MinGW, žádné potíže by neměly nastat. Pokud máte instalován jiný nástroj a nemáte v něm k dispozici kompilátor gcc, nebude generátor souboru makefile fungovat. I když lze provést různá nastavení, tak nejsou odzkoušená a na stránkách FAQ se jasně zmiňují o nutnosti mít k dispozici gcc (g++ pro C++).

  • Standard Make Project je vhodný, pokud si chcete makefile vytvářet sami, nebo tehdy, máte-li již nějaký k dispozici. S tímto projektem je více práce.
  •  
    Pro jednoduchost zvolte Managed Make Project a pokračujte tlačítkem Next do dalšího okna , kde uveďte název svého projektu. V našem případě se projekt bude jmenovat prvni_c. Ještě než zvolíte Finish, zkuste tlačítko Next a prohlédněte si možnosti, které se vám nabízí. Máte možnost zvolit si typ projektu a konfiguraci pro váš projekt. Jednak Debug a nebo Release. Tyto konfigurace například určují, jaké přepínače (-Wall -ansi -pedantic a jiné) se přidají za příkazy pro překlad, linkování apod. (jejich popis viz dále). Zaškrtněme obě možnosti.

    V okně za dalším tlačítkem Next lze určit reference projektu a nějaké další parametry. Protože prvni_c je náš první céčkový projekt, je seznam potenciálních referencí prázdný.

    Dokončete zakládání nového projektu tlačítkem Finish. Eclipse se vás pravděpodobně v tuto chvíli zeptá, zda se chcete přepnout do perspektivy (výběr okének a způsob jejich rozmístění po pracovní ploše) určené pro plugin CDT. Můžete zaškrtnout volbu Remeber my decision a Eclipse se vás již dál ptát nebude a spustí pokaždé perspektivu podle toho, zda jste dialog potvrdili nebo zamítli. Podle uvážení tuto nabídku potvrďte.

    2.2 Vytváření zdrojových souborů

    Teď když máme svůj nový projekt založen, je čas přidat do něj také zdrojové soubory.

    Klikněte pravým tlačítkem myši na menu File hlavní lišty a sjeďte až na File->New->Source File.

    V následujím okně zadáte jméno souboru. Pozor! je třeba zadat celý název včetně přípony. Tzn. že chceme-li přidat nový céčkový soubor prvni, musíme napsat do formuláře prvni.c.

    Obdobně přidáváme do projektu též hlavičkové soubory, které budeme vytvářet, jen volba bude File->New->Header File.

    V tuto chvíli máme již v projektu nový prázdný zdrojový soubor a můžeme se směle pustit do programování. Pro účely návodu si v našem případě vystačíme pouze s vypsáním několika řádek na standardní výstup. Celý program vypadá takto:

    	#include <stdio.h>
    	#include <stdlib.h>
    		
    	int globalni_promenna = 0;
    		
    	int main(int argc, char *argv[]) 
    	{
    	  int i = 0;
    	  if (argc > 1) {
    	    globalni_promenna = atoi(argv[1]);
    	  }
    	  else {
    	    printf("Zadej pocet opakovani: ");
    	    scanf("%d", &globalni_promenna);
    	  }
    	  for (i = 1; i <= globalni_promenna; i++) {
    	    printf("\n%d.\tPozdrav z Eclipse.", i);
    	  }
    	} 

    2.3 Sestavení programu (building)

    Způsob sestavení závisí zejména na tom, zda pracujeme na Managed Make Projektu, nebo na Standard Make Projektu. V našem případě je to ta první možnost, a proto se o sestavení nemusíme příliš starat. Druhou možnost zatím přenecháme zkušenějším. Následuje tedy popis překladu programu v rámci Managed Make Projektu.

    Kdykoliv uložíte soubor se zdrojovým kódem, bude program automaticky přeložen a sestaven (defaultně voláním příkazu make -k all).
    Pokud se vám tento automatický překlad nelíbí, může te jej zakázat odškrtnutím
    Project->Build Automatically a sestavovat program explicitně volbou Project->Build Project. V tomto případě je ovšem nutné, abyste se nejdříve "překlikli" do okna Navigation či C/C++ Projects a zvolili konkrétní projekt, pak je teprve možné překlad provést.

    Jak vypadá pracovní plocha při překladu našeho malého programu si můžete prohlédnout zde. Všimněte si varování, které nám CDT IDE na příslušné řádce vyznačí jako malý vykřičník na liště při levé straně editoru. Varování bere CDT z výstupu překladače gcc.
    Opravíme-li chybu, kterou jsme udělali, když jsme funkci s neprázdným (int) návratovým typem ukončili bez navrácení nějaké hodnoty, projde náš příklad již bez varování. V tuto chvíli nám do projektu přibyl adresář Debug a v něm spustitelný soubor prvni_c.exe.

    Přes menu Project->Properties a následně C/C++ Build, lze nastavit prakticky vše, co se týká sestavení programu a jeho překladu. Hned ze začátku je dobré si uvědomit, že volbou Debug / Release určujeme dvě různá nastavení. Typ Debug má při překladu nastaven samozřejmě překlad s debuggovacími informacemi a např. co největší počet varovných hlášení.
    Oproti tomu Release má typicky zapnuty optimalizace apod. Je tedy dobré, dát si pozor na to, který způsob vlastně zrovna nastavujeme. Zároveň, podle toho kterou z těchto možností v tomto okně potvrdíte (tlačítko Apply ), takovou při překladu CDT použije. Ponechme Debug.

    Jako malý příklad možností Managed Make Projektu uveďme způsob zapnutí přepínačů -pedantic a -ansi (přepínač -Wall je již defaultně nastaven):
    Opět v menu C/C++ Build zvolíme záložku Tool Settings a v GCC C Compiler větev Warnings. V pravé části okna máme nabídku s možnými přepínači, zaškrtněme volbu Pedantic. Ve větvi Misellaneous obdobně zvolíme Support ANSI programs. Na konzoli se můžete přesvědčit, že vaše volby nezůstaly bez odezvy.

    Stejným způsobem lze měnit mnohá další nastavení a pokud by snad některá nebyla k dispozici, je zde vždy možnost dopsat je ručně. Na tomto místě si můžeme povšimnout, že překlad programu z Managed Make Projektu je vázán na překladač GCC.

    Poznámka: Defaultní příkaz make -k all pro překlad a sestavení, lze změnit v záložce Build Settings

    2.4 Spuštění programu

    Způsob spuštění není kupodivu zcela triviální záležitost, jak bychom logicky očekávali. CDT vyžaduje, abychom nejprve program "zaregistrovali". K tomu potřebujeme spustitelný soubor vzniklý překladem.

    Máme-li již takový soubor (a my bychom ho v tuto chvíli již mít měli), můžeme jej volbou Run->Run... přidat do příslušného seznamu (C/C++) spustitelných souborů.

    Celý postup je k nahlédnutí zde. A výsledek našeho snažení zde. Pod Windows se stává, že obsah konzole není aktualizován hned poté, co jsme zavolali printf("Zadej pocet opakovani: ") a spuštění programu potom dopadne takto. Tedy program nejprve čeká, až zadáte počet opakování a teprve potom vás o to požádá. Tento problém se vyřeší zavoláním funkce fflush(stdout) vždy, když potřebujeme konzoli aktualizovat (zejména před čekáním na vstup od uživatele).

    Zde si povšimněme, že v okně pod volbou Run->Run... máme také možnost nastavit různé parametry spouštění. Pro nás jsou nejzajímavější parametry (argumenty) příkazové řádky, které nalezneme pod záložkou Arguments. Spustíte-li následně náš program s touto volbou, proběhne podle očekávání bez žádosti o zadání počtu opakování.

    2.5 Debugging

    Jak již bylo zmíněno v úvodu odstavce o instalaci, ladění nefunguje pod verzí Eclipse 3.1. Máte-li tyto potíže a nechce se vám instalovat Eclipse 3.0.x, budete nejspíš muset až do příští verze (CDT 2.2.1) výhody "klikacího" debuggingu oželet.

    2.5.1 Spuštění debuggeru

    Stejně jako v předchozím odstavci, vyžaduje CDT zaregistrovat nějaký spustitelný soubor pro debugging (nejlépe ten, který byl překládán se zapnutým debuggingem). Ovšem registrace pro normální rozběhnutí a pro debugging je jedno a totéž. Pokud jste tedy zdárně absolvovali předchozí odstavec, můžete se rovnou vrhnout na ladění.

    Začneme volbou Run->Debug... a v nám již známém okně vybereme svou aplikaci a záložku Debugger. Zde zvolte požadovaný typ debuggeru, proveďte tlačítkem Apply a spusťte ladění (Debug).
    Poznámka: Typ debuggeru se může lišit podle operačního systému a používaných nástrojů. V Linuxu je jasná volba GDB Debugger a pod Windows s nainstalovaným nástrojem MinGW (viz instalace) to bude opět GDB Debugger. (Pro nástroj Cygwin by to byla volba Cygwin GDB Debugger.)

    2.5.2 Prostředí

    Poté, co jste spustili debugger, budete opět dotázáni, zda použít implicitní perspektivu pro debugging. Tuto volbu doporučujeme. Následně se váš program inicializuje a je připraven k ladění. Pro účely debuggingu se vám otevře několik okének a na některá z nich se teď blíže podíváme.

    Poznámka: Další malá odlišnost mezi prostředím v Linuxu a Windows XP spočívá v tom, že pod Windows se pro váš program otevře nové okno s příkazovou řádkou. V Linuxu oproti tomu se vstup a výstup odehrává přímo v prostředí Eclipse v okně Console. Viz níže.

    CDT Debuugging nabízí mnohá další okna, ať už ta, která se vám otevřou rovnou při spuštění debuggeru či ta, která si sami navolíte. V tomto tutoriálu je už blíže popisovat nebudeme, protože nejlépe se jejich funkce zjistí a ověří prakticky.

    2.5.3 Doporučený postup při ladění

    Nyní je na řadě několik poznámek k započetí ladění programu a jeho průběhu. Ukončení práce s debuggerem spočívá pouze v přepnutí perspektivy. Tady je dobré si uvědomit vlastně úlohu perspektivy. Je to pouze jiný pohled na věc. Pozor tedy, přepnutí perspektivy neznamená ukončení běžícího (debugovaného) procesu!

    Více o debuggingu viz tutoriál ze stránek CDT.


    2005.03.12