MAKE-Direktiven
Nach oben zu MAKE.EXE
MAKE-Direktiven ähneln den Direktiven von Sprachen wie C und Pascal. Sie ermöglichen viele verschiedene Aktionen, wie zum Beispiel das Anzeigen von Befehlen vor der Ausführung auf dem Bildschirm. Eine MAKE-Direktive beginnt entweder mit einem Ausrufungszeichen oder mit einem Punkt. Direktiven haben Vorrang vor Befehlszeilenoptionen. Direktiven, die mit einem Ausrufungszeichen beginnen, müssen am Anfang einer neuen Zeile stehen.
Inhaltsverzeichnis
MAKE-Direktiven und ihre Befehlszeilenoptionen
Die folgende Tabelle enthält alle MAKE-Direktiven und die korrespondierenden Befehlszeilenoptionen.
Direktive | Option (sofern vorhanden) | Beschreibung/Beispiel |
---|---|---|
|
|
Aktiviert die automatische Abhängigkeitsprüfung. |
|
|
Aktiviert die Zwischenspeicherung von Informationen zur Abhängigkeitsprüfung. |
|
Verwendet die Zeichen | |
|
Verhält sich wie else if in C. | |
|
Verhält sich wie else in C. | |
|
Schließt eine | |
|
Hält MAKE an und gibt eine Fehlermeldung aus. Die Syntax der Direktive !if !$d(MYMACRO) #wenn MYMACRO nicht definiert ist !error MYMACRO ist nicht definiert !endif Wenn MYMACRO nicht definiert ist, beendet MAKE die Ausführung und erzeugt folgende Ausgabe:
| |
|
Steht am Beginn einer Bedingungsanweisung. | |
|
Verhält sich wie | |
|
Verhält sich wie | |
|
|
Ignoriert den Rückgabewert eines Befehls. |
|
|
Behält temporäre Dateien bei (normalerweise werden sie von MAKE gelöscht). |
|
Verhält sich wie | |
|
|
Beibehält die temporären Dateien, die von MAKE erzeugt wurden (sie werden normalerweise von MAKE gelöscht.) |
|
Gibt eine Meldung an stdout aus, während die MAKE-Datei verarbeitet wird. !message Das Makro ist hier definiert als: $(MakroName) Wenn MAKE diese Zeile abarbeitet, erscheint auf dem Bildschirm folgende Meldung (wenn die Makroerweiterung den String .CPP ergibt): | |
|
|
Deaktiviert die automatische Abhängigkeitsprüfung. |
|
|
Deaktiviert die Zwischenspeicherung von Informationen zur Abhängigkeitsprüfung. |
|
|
Deaktiviert .Ignore. |
|
|
Löscht die temporären Dateien, die von MAKE erzeugt wurden. |
|
|
Zeigt Befehle vor der Ausführung durch MAKE an. |
|
|
Lagert MAKE nicht aus dem Speicher aus, bevor ein Befehl ausgeführt wird. |
|
Teilt MAKE mit, nach Dateien mit der Erweiterung | |
|
Speichert die Zieldatei(en) auch dann, wenn der Build-Vorgang fehlschlägt. | |
|
|
Führt Befehle aus, ohne Sie zuerst auszugeben. |
|
Legt die implizite Regel für mehrdeutige Abhängigkeiten fest. .suffixes: .asm .c .cpp myprog.exe: myprog.obj bcc32 myprog.obj .cpp.obj: bcc32 -P -c $< .asm.obj: tasm /mx $ .c.obj: bcc32 -P- -c $< | |
|
|
Lagert MAKE aus dem Speicher aus, bevor ein Befehl ausgeführt wird. |
|
Löscht die Definition eines Makros. Das Makro ist dann nicht definiert. |
Makros in Direktiven
Das Makro $d kann zusammen mit der Bedingungsdirektive !if verwendet werden, um gewisse Aktionen nur dann durchzuführen, falls ein bestimmtes Makro definiert ist. Hinter $d muss ein in runde oder geschweifte Klammern gesetzter Makroname stehen. Dazu folgendes Beispiel:
!if $d(DEBUG) #Wenn DEBUG definiert ist, bcc32 -v f1.cpp f2.cpp #mit Debug-Informationen compilieren !else #Ansonsten bcc32 -v- f1.cpp f2.cpp #keine Debug-Informationen einbeziehen. !endif
Leere Makros
Während ein undefinierter Makroname bewirkt, dass ein Test von
!ifdef MacroName
false
zurückgibt, wird ein als leer definierter MacroName
true
zurückgeben. Ein leeres Makro kann definiert werden, indem das Geliechheitszeichen (=
) in der Definition des Makros entweder von Leerzeichen oder von ein Rückgabezeichen gefolgt wird. Das folgende Beispiel definiert ein leeres Makro in einer MAKE-Datei:
NULLMACRO =
Ein leeres Makro kann auch in der MAKE-Befehlszeile definiert werden, und zwar mit einer der folgenden Angaben:
NULLMACRO ="" -DNULLMACRO
!if und andere Bedingungsdirektiven
Die Direktive !if
arbeitet ähnlich wie die if
-Anweisungen der Sprache C. Die Syntax aller Bedingungsdirektiven ist ähnlich aufgebaut:
|
|
|
|
|
|
|
|
|
|
Die folgenden Ausdrücke sind gleichbedeutend:
!ifdef Makro und !if $d(Makro) ifndef Makro und !if !$d(Makro)
Es gelten folgende Regeln:
- Zwischen den Direktiven
!if
,!ifdef
oder!ifndef
einerseits und der zugehörigen Direktive!endif
andererseits darf nur maximal eine!else
-Direktive stehen. - Zwischen den Direktiven
!if
,!ifdef
,!ifndef
oder!else
einerseits und der zugehörigen Direktive!endif
andererseits dürfen beliebige viele!elif
-Direktiven stehen. - Eine Regel darf nicht über Zweige von Bedingungsdirektiven hinweg aufgespalten werden.
- Bedingungsdirektiven dürfen verschachtelt werden.
- Die zu der Direktive
!if
,!ifdef
oder!ifndef
gehörende!endif
-Direktive muss in derselben Datei stehen.
Zwischen den Direktiven !if
und !endif
darf Folgendes stehen:
- Makrodefinitionen
- Explizite Regeln
- Implizite Regeln
- Include-Direktive
- !error-Direktive
- !undef-Direktive
In einer if
-Anweisung besteht ein Bedingungsausdruck aus dezimalen, oktalen oder hexadezimalen Konstanten sowie den Operatoren der folgenden Tabelle.
Operator | Beschreibung | Operator | Beschreibung |
---|---|---|---|
|
Negation |
|
Bedingungsausdruck |
|
Bit-Komplement |
|
Logisches NICHT |
|
Addition |
|
Rechtsschieben |
|
Subtraktion |
|
Linksschieben |
|
Multiplikation |
|
Bitweises UND |
|
Division |
|
Bitweises ODER |
|
Rest |
|
Bitweises EXKLUSIVES ODER |
|
Logisches UND |
|
Größer oder gleich * |
|
Logisches ODER |
|
Kleiner oder gleich * |
|
Größer als |
|
Gleichheit * |
|
Kleiner als |
|
Ungleichheit * |
Der Operator * ist auch auf String-Ausdrücke anwendbar.
MAKE wertet jeden Bedingungsausdruck so aus, dass das Ergebnis entweder eine einfache, vorzeichenbehaftete 32-Bit-Ganzzahl oder ein String ist.