switch language to english

Werkzeuge

<< Zurück

Im Verlauf des Kurses werden anhand einfacher Beispiele und Übungen die Grundlagen der Programmierung und der Sprache C++ vermittelt. Dazu müssen auch die wichtigsten Werkzeuge wie UNIX, Editor, Compiler und Linker rudimentär beherrscht werden. Es wird bewußt auf den Einsatz einer Integrierten Entwicklungsumgebung, wie z.B. Eclipse, verzichtet.

Die Shell



Die Shell, auch Commandline, Kommandozeile oder Eingabeaufforderung, ist ein ''Programm'', das als Umgebung verwendet wird, um andere Programme zu starten. Die meisten Shells enthalten zusätzlich eine mehr oder weniger mächtige Skriptsprache, mit der komplexe Abläufe automatisiert werden können. Unter Linux ist mindestens eine Shell bereits mit dem System installiert, nicht selten die "bash", kurz für ''Bourne Again Shell''. Diese Shell ist auch auf Mac OS X bereits installiert. Sie finden Sie im "Dienstprogramme"-Ordner unter dem Namen "Terminal". Unter Windows gibt es zwar auch eine Kommandozeile, diese unterscheidet sich jedoch teilweise sehr deutlich von den unter UNIX-Systemen verbreiteten Shells. Wenn man eine entsprechende Shell auch unter Windows verwenden möchte, bietet sich die MSYS Umgebung des MinGW Projekts an.
Im folgenden wird die Auforderung zur Eingabe immer durch ein ">" gekennzeichnet, der nachfolgende Text muß über die Tastatur eingegeben werden bzw. handelt es sich um die Ausgaben des jeweils aufgerufenen Programms.

Beispiel:

> echo Hallo
 Hallo

Der Editor



Um ein Programm zu schreiben, benötigen Sie einen Editor. Hier reicht die Palette von einfachen textbasierten Editoren wie "nano" oder "pico" über die sehr leistungsfähigen, aber anfangs gewöhnungsbedürftigen, Editoren "vim", respektive "gvim", oder "emacs" bis hin zu komfortablen Entwicklungsumgebungen. Ein brauchbarer Mittelweg ist beispielsweise "gedit" ('gnome editor'). Auf dem Macintosh bietet sich z.B. das kostenlose Programm TextWrangler (sie Seite war beim letzten Test nicht verfügbar...) von BareBones an. Unter Windows gibt es z.B. mit Notepad++ einen freien Editor.
Ein nicht zu unterschätzender Punkt bei der Wahl des "richigen" Editors ist eine Unterstützung der verwendeten Programmiersprache. Dabei werden Schlüsselwörter farblich hervorgehoben, was das Lesen des Quelltextes erheblich erleichtert.

Der GNU Compiler



Im Kurs wird der GNU Compiler 2016 verwendet. Wenn Sie zuhause Programme mit dem GCC übersetzen wollen, müssen Sie evtl. zuerst die nötigen Programme installieren. Unter Linux muß hierzu ggf. das Paket g++ installiert werden. Auf dem Mac müssen Sie die Developer Tools installieren, die sich auf der mitgelieferten DVD befinden. Unter Windows können Sie MinGW nutzen oder die freie Entwicklungsumgebung (incl. Compiler) Code::Blocks installieren.
Um ein Programm zu übersetzen, rufen Sie g++ wie folgt auf:
  > g++ -Wall -c hello.cc

Dabei ist "g++" das Programm, "-Wall" ist ein Optionsschalter, der zusätzliche Warnungen beim Übersetzen ausgibt und "-c hello.cc" weist den Übersetzer an, die C++ - Datei "hello.cc" zu übersetzen.
Den Schalter "-Wall" zu verwenden mag gerade zu Anfang verwirrend viele Meldungen produzieren. Er ist jedoch oft bei der Fehlersuche sehr hilfreich, da der Übersetzer einige Meldungen ausgibt, die auf zwar syntaktisch korrekte aber semantisch fragwürdige Stellen im Quelltext hinweisen. Gewöhnen Sie sich an, diese Option zu nutzen!
Grundsätzlich gilt bei Fehlermeldungen und Warnungen: immer bei der allerersten (obersten) Meldung anfangen und immer einer Meldung nach der anderen nachgehen. Wenn Sie gleich 2 Seiten sehr verwirrende Fehlermeldungen bekommen, dann haben Sie sehr wahrscheinlich ein Problem mit dem 'stream' Operator <<, z.B. weil Sie eine Variable auszugeben wollen, deren Typ '<<' noch nicht kennt.
Ist der Übersetzungsvorgang erfolgreich gewesen, so gibt es jetzt eine zusätzliche Datei im Verzeichnis mit dem Namen "hello.o"
  > ls
  hello.cc  hello.o

Hierbei handelt es sich um eine sogenannte Objektdatei (das hat aber nichts mit Objektorientierung zu tun), die in einem weiteren Schritt mit anderen Objektdateien und Bibliotheken zu einem Programm gebunden werden muss. Um die Objektdatei nur mit der C++ Standardbibliothek zusammen zu binden geben Sie folgendes ein:
  > g++ -o hello hello.o

Das Programm "g++" wird jetzt als Linker eingesetzt, bzw. sammelt eigentlich im wesentlichen nur die nötigen Informationen und reicht diese an den tatsächlichen Linker (das Programm "ld") weiter. Die Option "-o hello" gibt hierbei an, wie das ausführbare Programm heißen soll. Wird dies weggelassen, wird das Programm "a.out" genannt. Wenn weitere, eigene Programmteile mit eingebunden werden sollen, so werden die weiteren Object-Files hinten angehängt.
Nach erfolgreichem Binden kann das Programm schließlich aufgerufen werden:
  > ./hello
  Hallo Welt!
Wichtig ist hier, dass dem Programmnamen der Pfad vorangestellt wird, im einfachsten Fall ist dies der aktuelle Pfad "./". Wird dies vergessen, bekommt man im besten Fall die lapidare Fehlermeldung, dass das Programm nicht gefunden werden konnte. Wenn andere Programme mit dem selben Namen existieren kann es passieren, dass tatsächlich ein anderes Programm aufgerufen wird. (Benennen Sie "hello" einfach mal um zu "ls" und rufen Sie es einmal mit Pfad und einmal ohne auf.)

Der GNU Debugger



Hat man erst einmal alle Tippfehler (Syntaxfehler) beseitigt, verbleiben oft noch Denkfehler im Programm. Diese kann man z.B. durch die Ausgabe von Zwischenergebnissen suchen. Ein sehr mächtiges Werkzeug zur Fehlersuche ist der Debugger. Dieser läuft, vereinfacht gesagt, parallel zum Programm, und erlaubt es z.B.
  • das Programm Schritt für Schritt zu durchlaufen,
  • zu beobachten, wie sich Werte jeweils ändern,
  • das Programm automatisch anzuhalten, sobald eine bestimmte Stelle erreicht ist oder
  • das Programm anzuhalten wenn sich ein bestimmter Wert ändert.

Prinzipiell arbeitet der Debugger auch ohne die Unterstützung des Compilers, aber ohne die entsprechende Integration müßte man das Programm in Maschinensprache analysieren, was nur für Erfahrene und Abenteurer wirklich interessant ist. Übersetzt man sein Programm jedoch mit entsprechender Unterstützung, arbeitet der Debugger komfortabel auf der Ebene der Programmiersprache. Hierzu müssen die Programme mit der Option "-g" übersetzt und gebunden werden:
  > g++ -Wall -g -c hello.cc
  > g++ -g -o hello hello.o

Den GNU Debugger starten Sie mit
  > gdb ./hello
  ...
  (gdb)

Der Debugger ist Kommandogesteuert, die Aufforderung (das prompt) ist (gdb). Mit dem Kommando help bekommen Sie Hilfe zu den verschiedenen Themen. Anfangs ist es etwas gewöhnungsbedürftig, sich in der Hilfe zurechtzufinden. Einige wichtige Kommandos sind:
  • quit: Debugger verlassen
  • list: Quelltext in der aktuellen Umgebung ausgeben.
  • break: Einen Unterbrechungspunkt setzen. Das Kommando akzeptiert unter anderem eine Zeilennummer oder den Namen einer Funktion. Um z.B. einen Unterbrechungspunkt am Anfang des Programms zu setzen, geben Sie "break main" ein.
  • watch: Einen automatischen Unterbrechnungspunkt erstellen, der das Programm unterbricht, sobald sich ein Ausdruck verändert.
  • start / run: Das Programm wird bis zum nächsten Unterbrechungspunkt ausgeführt. "start" fügt automatisch einen Unterbrechungspunkt am Anfang von main() ein.
  • continue: Nach einer Unterbrechung fortzusetzen.
  • step: Einzelne Schritte ausführen
  • print: Einen Ausdruck anzeigen.

CMake



CMake ist eine einfaches Tool um automatisch Compile scripte (Makefiles) automatisch erstellen zu lassen. Die Syntax ist einfach und schnell zu erlernen. Ein schönes Tutorial findet man auf der CMake Seite.
Hier ist ein minimal script, welches man für einfache Projekte ohne Verzeichnisstruktur sehr einfach anpassen kann. Hierbei liegen alle cpp Files im gleichen Verzeichnis wie das CMakeLists.txt file:

CMakeLists.txt

  cmake_minimum_required (VERSION 2.6)
  project (Project)

  #add all required cpp files
  set (PROJECT_SRCS
      main.cpp
      project.cpp
  )

  # add the executable
  add_executable(project ${PROJECT_SRCS})

Im Projekt-Verzeichnis kann man nun mit " cmake ." das Script starten um ein Makefile zu erzeugen. Anschließend muss mit make noch compiliert werden. Um in größeren Projekten parallel auf mehreren Kernen zu bauen, kann man make den Parameter " -j" mitgeben.
CMake unterstützt neben Makefiles auch alternative build systeme wie z.B. ninja, was angeblich deutliche Geschwindigkeitsvorteile bietet, wenn viele Files im Projekt gebaut werden müssen.

Installationen unter Windows



Um unter Windows die GNU Werkzeuge zu benutzen gibt es mehrere Wege. Einige Möglichkeiten sind hier aufgelistet.

MinGW

Die Umgebung MinGW (Minimalist GNU for Windows) haben in der Vergangenheit mehrere Leute (auch ich) erfolgreich verwendet.
Eine (im WS1314 erfolgreiche Methode) folgt der Installationsanleitung auf der MINGW Seite, die im linken Navigationsbar zu finden ist. Falls der Installer nicht funktioniert, müssen die (>18!) Pakete einzeln heruntergeladen und installiert werden (1/2h...).
Alternativ kann man bei sourceforge nach der neuesten Version des ''MinGW-MSYS Bundle'' nutzen, z.B. durch Suche nach ''MSYS''. Diesen gemeinsamen Installer habe ich (PF) noch nicht ausprobiert, ich wäre für Feedback/Erfahrungen oder eine genauere Anleitung dankbar...

Cygwin

Eine alternative Installation findet man unter Cygwin, ich habe das aber nicht ausprobiert.

Code::Blocks

Im letzten Kurs hat jemand wohl problemlos und erfolgreich die IDE Code::Blocks installiert.


zum Seitenanfang