Wrapper für C/C++-Compiler

Beschreibung
Einrichten und Testen

1 Beschreibung

Das C-Programm mcc stellt einen Aufsatz ("Wrapper") für einen beliebigen C-Compiler (z.B. cc, gcc) dar, der zum Übersetzen von C/C++-Programmen anstelle des C-Compilers aufgerufen wird. mcc ruft dann den eigentlichen C-Compiler mit allen angegebenen Optionen und Parametern auf. Wer keine IDE (Integrierte Entwicklungsumgebung) wie "Kdevelop", "Eclipse" oder "Visual Studio" (einsetzen) mag, sondern lieber auf der Kommandozeile arbeitet, kann damit die Syntaxfehlerbehebung deutlich erleichtern und beschleunigen.

Treten beim Übersetzen Compiler-Meldungen (Fehlern und Warnungen) auf, sammelt mcc diese, "mischt" sie an der richtigen Stelle in den Quellcode und startet mit dem Ergebnis einen beliebigen Editor (z.B. vi, emacs), der automatisch zur 1. Meldung springt. Die Compiler-Meldungen sind mit Präfixen/Postfixen gekennzeichnet und durchnumeriert, damit man sie suchen kann und außerdem erkennt, wieviele noch vorhanden sind.

Mit dem Editor-Befehl "Suche wiederholen" springt man nach und nach zu den Compiler-Meldungen und versucht die Fehler/Warnungen zu beheben. Die "gemischte Datei" kann dabei beliebig verändert werden. Irgendwann speichert man sie ab und verlässt den Editor.

Danach werden die Compiler-Meldungen "rausgemischt" und der Übersetzungslauf erneut gestartet. Diese "Korrekturschleife" findet solange statt, bis keine Compiler-Meldungen mehr vorhanden sind, man nichts mehr an der Datei ändert oder den mcc abbricht (z.B. mit Strg-C).

Beim Aufruf mit mcc werden Warnungen zwar mit "eingemischt", falls aber keine einzige Fehlermeldung mehr vorhanden ist, wird der Editor nicht mehr gestartet. Bei Aufruf mit mccw (w=Warnungen) werden auch Warnungen als Fehler betrachtet und der Editor gestartet, bis auch diese verschwunden sind (daher vielleicht noch einen Link mccw auf mcc anlegen).

Unterstützt werden die Suchbefehle der Editoren vi, vim, emacs und eve. Andere Editoren sind zwar auch einsetzbar, allerdings muss man den Suchbefehl nach dem Präfix manuell durchführen. Auf Wunsch integrieren wir die Meldungserkennung für weitere Compiler bzw. die automatische Suche für weitere Editoren! Dazu müssen Sie uns nur die Meldungen Ihres C-Compilers beim Übersetzen des C-Programms test.c bzw. das Kommando zum Editoraufruf für eine Datei mit gleichzeitigem Start einer Suche an uns mailen.

Hinweis: Wird mehr als eine Datei beim Aufruf des Compilers angegeben, so wird nur die erste fehlerbehaftete Datei zum Editieren angeboten. Sobald sie fehlerfrei ist, wird die nächste mit Fehlern behaftete Datei editierbar. Bereits korrekte Quelldateien vor der ersten fehlerbehafteten Datei werden (leider) immer wieder neu übersetzt, nachdem die fehlerbehaftete Datei verbessert wurde.

Die vollständige Dokumentation steht in Form von eingebettetem LaTeX-Code direkt im Quellcode (abgespeckte Form von "Literate Programming" analog "javadoc"). Mit dem Tool texdoc.sh kann aus dem Quellcodes eine (schöne) PDF-Datei mit der reinen Dokumentation oder inklusive des C-Quellcode erzeugt werden.

2 Einrichten und Testen

Folgende Einstellungen sind per Umgebungs-Variable möglich (Optionen machen wenig Sinn, da sie eventuell dem C-Compiler weggenommen werden):

VariableBedeutungDefault
COMPILER /PFAD/ZU/COMPILER /usr/bin/gcc
EDITOR /PFAD/ZU/EDITOR /bin/vim
PREFIX Präfix vor Fehlermeldungen >>>
POSTFIX Postfix nach Fehlermeldungen <<<
CFLAGS Zusätzliche C-Compiler Flags -Wall
DEBUG Debug-Modus an (1) 0

Die Befehle zum Erstellen von mcc (C-Compiler vorher installieren!) lauten:

cc -Wall mcc.c -o mcc
ln -s mcc mccw

Zum Testen des erstellten mcc das (fehlerhafte) C-Beispielprogramm test.c verwenden (vorher eine Kopie machen, sonst kann man die verbesserten Fehler nicht mehr rekonstruieren ;->):

./mcc test.c
./mccw test.c

Um einen speziellen Compiler oder Editor einzustellen, folgende Kommandos verwenden:

export COMPILER="/usr/bin/cc" # sh, bash, ksh
export EDITOR="/bin/vi"       # sh, bash, ksh
setenv COMPILER "/usr/bin/cc" # csh, tcsh
setenv EDITOR "/bin/vi"       # csh, tcsh
Soll mcc ohne den vorangestellten Pfad ./ aufgerufen werden, kopiert man ihn entweder in das eigene Programm-Verzeichnis ~/bin

cp mcc ~/bin

oder in das systemweite Programm-Verzeichnis /usr/local/bin (in diesem Fall muss man vorher "root" werden!).

su
cp mcc /usr/local/bin
exit

Zumindest eines dieser Verzeichnisse müsste sich im Suchpfad $PATH befinden:

echo $PATH
Wenn nein, den Suchpfad mit folgenden Befehlen auf der Kommandozeile (oder in einer Shell-Konfigurationsdatei ~/.profile, ~/.bashrc, …) verlängern:

 PATH=$PATH:/usr/local/bin              # sh, bash, ksh
 set path = ( $path /usr/local/bin )    # csh, tcsh
 setenv PATH ${PATH}:/usr/local/bin     # csh, tcsh