1 | Beschreibung |
2 | 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):
Variable | Bedeutung | Default |
---|---|---|
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