Eclipse 4.3 (Kepler) til C/C++-programmering
On november 9, 2021 by adminEclipse er et integreret udviklingsmiljø (IDE) med åben kildekode, der understøttes af IBM. Moderwebstedet er @ www.eclipse.org. Eclipse er populær til udvikling af Java-projekter. Det understøtter også udvikling af C/C++, PHP, Python, Perl og andre webprojekter via udvidelige plug-ins. Eclipse er cross-platform og kører under Windows, Linux og Mac OS.
Sådan installerer du Eclipse C/C++ Development Tool (CDT) 8.1.2 til Eclipse 4.2.2 (Juno)
Stræk 0: Installer MinGW GCC eller Cygwin GCC
For at bruge Eclipse til C/C++-programmering har du brug for en C/C++-kompiler. På Windows kan du installere enten MinGW GCC eller Cygwin GCC. Vælg MinGW, hvis du ikke er sikker, fordi MinGW er lettere og nemmere at installere, men har færre funktioner.
- MinGW GCC: Læs “Sådan installeres MinGW”.
- Cygwin GCC: Læs “How to Install MinGW”: Læs “Sådan installeres Cygwin”. Sørg for, at du vælger pakkerne “
gcc
“, “g++
“, “gdb
” og “make
” under “Devel
” (Development) kategori – disse pakker er ikke en del af standardinstallationen.
Stræk 1: Installer Eclipse C/C++ Development Tool (CDT)
Der er to måder at installere CDT på, afhængigt af om du tidligere har installeret en Eclipse:
- Hvis du allerede har installeret “Eclipse for Java Developers” eller andre Eclipse-pakker, kan du installere CDT-plugin’et på følgende måde:
Lancer Eclipse ⇒ Hjælp ⇒ Installer ny software ⇒ I feltet “Work with” skal du trække drop-down-menuen ned og vælge “Kepler – http://download.eclipse.org/releases/kepler” (eller juno for Eclipse 4.2; eller helios for Eclipse 3.7).
I feltet “Name” skal du udvide noden “Programming Language” ⇒ Markér “C/C++ Development Tools” ⇒ “Next” ⇒ … ⇒ “Finish”. - Hvis du ikke har installeret nogen Eclipse-pakke, kan du downloade “Eclipse IDE for C/C++ Developers” fra http://www.eclipse.org/downloads, og udpak den downloadede fil til en mappe efter eget valg.
Stræk 2: Konfiguration
Du behøver IKKE at foretage nogen konfiguration, så længe Cygwin- eller MinGW-binærfilerne er inkluderet i -miljøvariablen. CDT søger i PATH
for at finde C/C++-kompilatorerne.
Skrivning af dit første C/C++-program i Eclipse
C++-program
Stræk 0: Start Eclipse
- Start Eclipse ved at køre “
eclipse.exe
” i den installerede Eclipse-mappe. - Vælg en passende mappe til dit arbejdsområde (f.eks, hvor du vil gemme dine værker).
- Hvis “velkomst”-skærmen vises, skal du lukke den ved at klikke på “close”-knappen.
Stræk 1: Opret et nyt C++-projekt
For hver C++-applikation skal du oprette et projekt til at opbevare alle kildekoder, objektfiler, eksekverbare filer og relevante ressourcer.
For at oprette et nyt C++-projekt:
- Vælg “File”-menuen ⇒ “New” ⇒ Project… ⇒ C/C++ ⇒ C++-projekt.
- Dialogen “C++-projekt” vises.
- I feltet “Projektnavn” skal du indtaste “
FirstProject
“. - I feltet “Projekttyper” skal du vælge “Eksekverbar” ⇒ “Tomt projekt”.
- I feltet “Værktøjskæder” skal du vælge din compiler, f.eks, “Cygwin GCC” eller “MinGW GCC” ⇒ Næste.
- I feltet “Projektnavn” skal du indtaste “
- Dialogen “Select Configurations” (Vælg konfigurationer) vises. Vælg både “Debug” og “Release” ⇒ Afslut.
Stræk 2: Skriv et Hello-world C++-program
- I “Project Explorer” (panelet længst til venstre) ⇒ Højreklik på “
FirstProject
” (eller brug menuen “File”) ⇒ New ⇒ New ⇒ Source File. - Dialogen “New Source File” (ny kildefil) vises.
- Indtast “
Hello.cpp
” i feltet “Source file”. - Klik på “Finish”.
- Indtast “
- Kildefilen “
Hello.cpp
” åbnes på editorpanelet (dobbeltklik evt. på “test.cpp
” for at åbne). Indtast følgende koder:#include <iostream>using namespace std; int main() { cout << "Hello, world!" << endl; return 0;}
Hvis “Unresolved Inclusion Error”
Hvis fejlen “unresolved inclusion” vises ved siden af #include
-erklæringen, er “include paths for headers” ikke indstillet korrekt. Vælg “Project”-menuen ⇒ Properties ⇒ C/C++ General ⇒ Paths and Symbols ⇒ Under fanen “Includes”:
For Cygwin GCC:
- “Tilføj” følgende mapper til “GNU C”, hvor
$CYGWIN_HOME
er din Cygwin-installerede mappe:$CYGWIN_HOME\lib\gcc\i686-pc-cygwin.5.x\include
$CYGWIN_HOME\lib\gcc\i686-pc-cygwin.5.x\include-fixed
$CYGWIN_HOME\usr\include
$CYGWIN_HOME\usr\include\w32api
- “Tilføj” følgende mapper til “GNU C++”, hvor
$CYGWIN_HOME
er din Cygwin-installerede mappe:$CYGWIN_HOME\lib\gcc\i686-pc-cygwin.5.x\include\c++
$CYGWIN_HOME\lib\gcc\i686-pc-cygwin.5.x\include\c++\i686-pc-cygwin
$CYGWIN_HOME\lib\gcc\i686-pc-cygwin.5.x\include\c++\backward
$CYGWIN_HOME\lib\gcc\i686-pc-cygwin.5.x\include
$CYGWIN_HOME\lib\gcc\i686-pc-cygwin.5.x\include-fixed
$CYGWIN_HOME\usr\include
$CYGWIN_HOME\usr\include\w32api
$CYGWIN_HOME\usr\include\w32api
For MinGW GCC:
- “Tilføj” følgende mapper til “GNU C”, hvor
$MINGW_HOME
er din installerede MinGW-mappe:$MINGW_HOME\lib\gcc\mingw32.6.x\include
$MINGW_HOME\include
$MINGW_HOME\lib\gcc\mingw32.6.x\include-fixed
- “Tilføj” følgende mapper til “GNU C++”, hvor
$MINGW_HOME
er din Cygwin-installerede mappe:$MINGW_HOME\lib\gcc\mingw32.6.x\include
$MINGW_HOME\include
$MINGW_HOME\lib\gcc\mingw32.6.x\include-fixed
- “Add” the following directories to “GNU C++”, where
$MINGW_HOME
is your Cygwin installed directory:$MINGW_HOME\lib\gcc\mingw32.6.x\include\c++
$MINGW_HOME\lib\gcc\mingw32.6.x\include\c++\mingw32
$MINGW_HOME\lib\gcc\mingw32.6.x\include\c++\backward
$MINGW_HOME\lib\gcc\mingw32.6.x\include
$MINGW_HOME\include
$MINGW_HOME\lib\gcc\mingw32.6.x\include-fixed
BEMÆRK: For at finde stierne til overskrifter kan du foretage en søgning på overskrifter som f.eks. “stdio.h
” (for C) og “iostream
” (for C++) under den installerede Cygwin- eller MinGW-mappe.
libmpfr4
” i cygwin.Stræk 3: Kompilér/opbyg
Højreklik på “FirstProject
” (eller brug “Project”-menuen) ⇒ vælg “Build Project” for at kompilere og linke programmet.
Stræk 4: Kør
For at køre programmet skal du højreklikke på “FirstProject
” (eller et hvilket som helst sted på kildekoden “test.cpp
“, eller vælg “Run”-menuen) ⇒ Run As ⇒ Local C/C++ Application ⇒ (Hvis du spørger, skal du vælge Cygwins gdb-debugger) ⇒ Output “Hello, world!” vises på “Console”-panelet.
BEMÆRK: Du skal oprette et nyt C++-projekt for HVERT af dine programmeringsproblemer. Dette er rodet til at skrive legetøjsprogrammer!
C-program
Følg de samme trin som ovenfor. Opret et “C-projekt” (i stedet for et “C++-projekt”). Prøv følgende Hello-world-program (kaldet “Hello.c
“).
#include <stdio.h> int main() { printf("Hello, world!\n"); return 0;}
C++-program med makefile
I de foregående eksempler bruger vi såkaldt managed-make, hvor Eclipse automatisk genererede en makefile til at bygge programmet. Vi kan også vælge at skrive vores egen makefile for at få fuld kontrol over byggeprocessen.
Stræk 1: Opret et C++ Makefile-projekt
Fra “File”-menuen ⇒ New ⇒ Project… ⇒ C/C++ ⇒ C++-projekt ⇒ I “Projektnavn” indtastes “HelloCppMakefile
” ⇒ I “Project type” skal du vælge “Makefile Project “, “Empty Project” ⇒ I “Toolchains” skal du vælge “Cygwin GCC” eller “MinGW GCC”. Ignorer advarselsmeddelelsen.
Stræk 2: Skriv et C++-program
Højreklik på projektet ⇒ New ⇒ New ⇒ Source File ⇒ I “Source file” skal du indtaste “Hello.cpp
” ⇒ Indtast følgende kildekoder:
#include <iostream>using namespace std; int main() {cout << "Hello, world!" << endl;return 0;}
Stræk 3: Skriv en Makefile
Højreklik på projektet ⇒ New ⇒ File ⇒ File ⇒ Indtast “makefile
” i “File name”. ⇒ Indtast følgende koder. Vær opmærksom på, at du skal bruge en tabulator (IKKE mellemrum) til indrykning.
all: Hello.exe clean:rm Hello.o Hello.exe Hello.exe: Hello.og++ -g -o Hello.exe Hello.o Hello.o: Hello.cppg++ -c -g Hello.cpp
Stræk 4: Byg projektet
Højreklik på projektet ⇒ Byg projektet.
Stræk 5: Kør programmet
Højreklik på projektet ⇒ Kør som ⇒ Lokal C/C++-applikation.
Skriv en makefile til at kompilere legetøjsprogrammer under ét projekt.
Læs dokumentationen
Du SKAL som minimum bladre Eclipses “Workbench User Guide” og “C/C++ Development User Guide” igennem – tilgængelige via Eclipses “Welcome”-side eller “Help”-menu. Dette vil spare dig mange pinefulde timer med at forsøge at finde ud af, hvordan du gør nogle ting senere.
Debugging C/C++ Programmer i Eclipse CDT
Det er afgørende for programmering at kunne bruge en grafisk debugger til at debugge program. Det kan spare dig utallige timer med at gætte på, hvad der gik galt.
Stræk 0: Skriv et C++-program – Følgende program beregner og udskriver faktoren for n
(=1*2*3*...*n
). Programmet har imidlertid en logisk fejl og producerer et forkert svar for n
=20
(“The Factorial of 20 is -2102132736
” – et negativt tal?!).
1234567891011121314 |
#include <iostream>using namespace std; int main() { int n = 20; int factorial = 1; // n! = 1*2*3...*n for (int i = 1; i <= n; i++) { factorial *= i; } cout << "The Factorial of " << n << " is " << factorial << endl; return 0;} |
The Factorial of 20 is -2102132736
Lad os bruge den grafiske debugger til at fejlsøge programmet.
Stræk 1: Indstil et indledende breakpoint – Et breakpoint suspenderer programmets udførelse, så du kan undersøge de interne tilstande (f.eks, værdien af variabler) i programmet. Før du starter debuggeren, skal du indstille mindst ét breakpoint for at suspendere udførelsen inde i programmet. Sæt et breakpoint ved funktionen main()
ved at dobbeltklikke på venstre margen af den linje, der indeholder main()
. Der vises en blå cirkel i venstre margen, som angiver, at der er sat et breakpoint på den pågældende linje.
Stræk 2: Start Debugger – Højreklik på projektet (eller brug menuen “Kør”) ⇒ “Debug As” ⇒ “Local C/C++ Application” ⇒ vælg “Yes” for at skifte til “Debug”-perspektivet (Et perspektiv er en bestemt opstilling af paneler, der passer til en bestemt udviklingsopgave som f.eks. redigering eller fejlsøgning). Programmet begynder eksekveringen, men suspenderer sin drift ved breakpointet, dvs. main()
-funktionen.
Som illustreret i følgende diagram angiver den fremhævede linje (der også er markeret med en blå pil) det statement, der skal udføres i det næste trin.
Stræk 3: Step-Over og se variabler og output – Klik på knappen “Step Over” (eller vælg “Step Over” fra “Run”-menuen) for at gå igennem dit program i et enkelt trin. Ved hvert trin skal du undersøge værdien af variablerne (i “Variable”-panelet) og de output, der eventuelt produceres af dit program (i “Console”-panelet). Du kan også placere markøren på en variabel for at undersøge indholdet af variablen.
Single-stepping gennem programmet og se værdierne af interne variabler og de producerede output er det ultimative middel til fejlfinding af programmer – fordi det er præcis, hvordan computeren kører dit program!
Strin 4: Breakpoint, Run-To-Line, Resume og Terminate – Som nævnt suspenderer et breakpoint programmets udførelse og lader dig undersøge programmets interne tilstande. Hvis du vil indstille et breakpoint på et bestemt statement, skal du dobbeltklikke på venstre margen af den pågældende linje (eller vælge “Toggle Breakpoint” fra “Run”-menuen).
“Resume” fortsætter programudførelsen, indtil næste breakpoint eller til slutningen af programmet.
“Single-step” gennem en løkke med et stort antal er tidskrævende. Du kan sætte et breakpoint ved et statement umiddelbart uden for sløjfen (f.eks. linje 12 i ovenstående program) og give “Resume” for at afslutte sløjfen.
Alternativt kan du placere markøren på et bestemt statement og give “Run-To-Line” fra “Run”-menuen for at fortsætte udførelsen op til linjen.
“Terminate” afslutter debugging-sessionen. Afslut altid din aktuelle debugging-session ved at bruge “Terminate” eller “Resume” til slutningen af programmet.
Stræk 5: Skift tilbage til C/C++-perspektivet – Klik på ikonet for “C/C++”-perspektivet i øverste højre hjørne for at skifte tilbage til “C/C++”-perspektivet for yderligere programmering (eller menu “Window” ⇒ Open Perspective ⇒ C/C++).
Jeg kan ikke understrege mere, at det er afgørende for programmering at beherske brugen af debugger. Udforsk de funktioner, som debuggerne tilbyder.
Andre debugger-funktioner
Modificer værdien af en variabel: Du kan ændre værdien af en variabel ved at indtaste en ny værdi i panelet “Variabel”. Dette er praktisk til midlertidigt at ændre et programs adfærd, uden at ændre kildekoden.
Step-Into og Step-Return: For at fejlfinde en funktion skal du bruge “Step-Into” til at gå ind i det første statement i metoden. Du kan bruge “Step-Return” til at vende tilbage til opkalderen, hvor som helst i metoden. Alternativt kan du sætte et breakpoint inde i en metode.
BEMÆRK: Hvis du får fejlmeddelelsen “Can’t find a source file at /cygdrive/c
…” under debugging, skal du konfigurere en mapping mellem “/cygdrive/c
” og “c:/
” (under forudsætning af at dit program i holdes i drev c. Fra “Window” ⇒ “Preferences” ⇒ “C/C++” ⇒ “Debug” ⇒ “Common Source Lookup Path”, vælg “Add” ⇒ “Path Mapping”.
Tips & Tricks
Læs Eclipse for Java’s Tips & Tricks for generelle tips til brug af Eclipse.
C/C++-softwareudvikling ved hjælp af GCC
- Du kan finde de kommandoer, der bruges i Eclipse CDT til at bygge projektet på “
<workspace>\.metadata\.plugins\org.eclipse.cdt.ui\global-build.log
“. - Indstilling af include-paths, library-paths og biblioteker: Når programmet bygges, har compileren brug for headerfilerne for at kompilere kildekoderne; linkeren har brug for bibliotekerne for at opløse eksterne referencer. Compileren søger i “include-paths” efter de headers, der er angivet i
#include
-direktiverne. Linkeren søger i “library-paths” efter de “biblioteker”, der er nødvendige for at linke programmet. I GCC angives include-path via-Idir
-optionen eller miljøvariablenCPATH
. Library-path angives via-Ldir
-optionen eller miljøvariabelLIBRARY_PATH
. Biblioteketlibxxx.a
angives via-lxxx
-indstillingen (lille bogstav'l'
, uden præfiksetlib
og.a
-udvidelsen).
I Eclipse CDT kan du indstille include-stierne, biblioteksstierne og bibliotekerne ved at højreklikke på projektet ⇒ Egenskaber ⇒ C/C++ Generelt ⇒ Stier og symboler ⇒ Under fanerne “Includes”, “Library Paths” og “Libraries”. Indstillingerne gælder kun for det valgte projekt.
Hvis du vil indstille include-stierne og biblioteksstierne for alle projekter, skal du indstille miljøvariablerneCPATH
ogLIBRARY_PATH
. I Eclipse skal du vælge “Window” ⇒ Preferences ⇒ C/C++ ⇒ Build ⇒ Environment.
Alternativt kan du kopiere headere og biblioteker til systemkataloger, og du kan udelade include-paths og library-paths. - OpenGL med GLUT: For Cygwin skal du installere gcc, g++, gdb, make (under kategorien Devel) og opengl, freeglut (under kategorien graphics). Hovederne
gl.h
,glu.h
,glut.h
opbevares i$cygwin\usr\include\w32api\GL
. Brug#include <GL/gl__.h>
til at inkludere overskrifterne. Bibliotekernelibopengl32.a
libglu32.a
oglibglut32.a
opbevares i$cygwin\lib\w32api
. Hvis du vil angive disse biblioteker i forbindelse med linking, skal du bruge indstillingerne-lopengl32
-lglu32
-lglut32
(uden præfiksetlib
og udvidelsen.a
). - OpenGL med SDL: Hent SDL fra http://www.libsdl.org. Vælg Development Libraries ⇒ win32 ⇒ mingw32 ⇒ Unzip. Kopier headers-mappen
SDL
(underinclude
) til$cygwin\usr\include\w32api
; kopier alle biblioteksfiler ilib
til$cygwin\lib\w32api
; kopier run-time-biblioteketSDL.dll
(underbin
) tilWindows/System32
. I dit program skal du inkludere disse to headere:#include <SDL/sdl.h>
og#include <SDL/sdl_opengl.h>
. Til linking skal du tilføje disse biblioteker:-lSDL
-lSDLmain
. - #pragma Comment-direktiv: pragma comment-direktiv, f.eks.
#pragma comment(lib, "opengl32.lib")
, bruges ofte til at inkludere et bestemt bibliotek (det samme som-l
-indstillingen). Dette systemafhængige direktiv virker på Windows’ compiler, men IKKE i GCC. - Fejl “multiple target patterns”: Der er et problem med GNU make (ved
$Cygwin\bin\make.exe
). Erstattet af denne kopi @ http://www.cmake.org/files/cygwin/make.exe. - fflush(stdout): gcc-biblioteket anvender buffered I/O (i overensstemmelse med C-specifikationen). Output skrives kun ud til outputstrømmen efter et newline-tegn. Du kan skylle output med en
fflush()
. - Projektnavnet må ikke indeholde ordet “setup”: Hvis du navngiver dit C/C++-projekt med et navn, der indeholder ordet “
setup
“, vil det resulterende “*setup*.exe
” udløse UAC (User Authorization Control) og kræve administratorrettigheder for at køre. (Det tog mig et par timer at finde ud af! Prøv at omdøbe en “hello.exe
” til “mysetup.exe
“.)
File I/O i Eclipse
Referer til Eclipse for Java’s File IO.
Skriv et svar