MAKE-Makros

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu MAKE.EXE

Ein Makro ist eine Variable, die von MAKE zu einem String erweitert wird, wenn MAKE in einer MAKE-Datei auf das Makro trifft. Beispielsweise können Sie ein Makro LIBNAME definieren, das den String mylib.lib repräsentiert. Dazu geben Sie die Zeile
LIBNAME = mylib.lib am Anfang der MAKE-Datei ein. Wenn MAKE später auf das Makro $(LIBNAME) trifft, wird stattdessen der String mylib.lib eingesetzt. Mit Makros lassen sich Dateivorlagen erstellen, die dann jeweils projektspezifisch angepasst werden können.

Um ein Makro in einer MAKE-Datei zu verwenden, geben Sie $(MacroName) ein, wobei MacroName ein definiertes Makro sein muss. MacroName kann in geschweifte oder runde Klammern eingeschlossen werden.

MAKE erweitert Makros zu verschiedenen Zeitpunkten, und zwar abhängig davon, wo sie in der MAKE-Datei stehen:

  • Verschachtelte Makros werden erweitert, sobald das umschließende Makro aufgerufen wird.
  • Makros in Regeln und Direktiven werden erweitert, sobald MAKE die MAKE-Datei zum ersten Mal öffnet.
  • Makros in Befehlen werden erweitert, wenn der Befehl ausgeführt wird.

Wenn MAKE ein nicht definiertes Makro in einer MAKE-Datei findet, wird nach einer Umgebungsvariablen mit diesem Namen gesucht (normalerweise mit SET definiert) und entsprechend der Zuweisung erweitert. Wenn beispielsweise der Eintrag $(PATH) in einer MAKE-Datei enthalten ist, ohne dass es ein solches Makro gibt, verwendet MAKE den Text, der in Ihrer Datei AUTOEXEC.BAT der Umgebungsvariablen PATH zugewiesen wurde. In der Dokumentation Ihres Betriebssystems finden Sie Details zu Umgebungsvariablen.

Syntax

<MakroName> = <Erweiterungstext>
Element Beschreibung
<MakroName>

Berücksichtigt die Groß- und Kleinschreibung (MACRO1 ist etwas anderes als Macro1). Kann bis zu 512 Zeichen enthalten.

<Erweiterungstext>

Ist begrenzt auf 4096 Zeichen. Dabei sind Buchstaben, Ziffern, Interpunktionszeichen und Leerzeichen erlaubt.


Jedes Makro muss in einer eigenen Zeile der MAKE-Datei definiert werden und jede Makrodefinition muss mit dem ersten Zeichen der Zeile beginnen. Normalerweise setzt man die Makrodefinitionen an den Anfang der MAKE-Datei. Wenn MAKE mehr als eine Definition für MakroName findet, so ersetzt die neue Definition die alte.

Makros lassen sich auch mit Hilfe der Befehlszeilenoption -D definieren. Vor oder nach dem Gleichheitszeichen (=) darf kein Leerzeichen stehen. Es kann auch mehr als ein Makro definiert werden, die einzelnen Makros werden dabei durch Leerzeichen getrennt. Die folgenden Beispiele zeigen, wie Makros in der Befehlszeile definiert werden:

make -Dsourcedir=c:\projecta
make -Dcommand="bcc32 -c"
make -Dcommand=bcc32 option=-c

Hinweis: Makros, die in MAKE-Dateien definiert sind überschreiben solche, die in der Befehlszeile definiert werden.

String-Ersetzungen in MAKE-Makros

MAKE ermöglicht es, in einem zuvor definierten Makro einige Zeichen zeitweilig durch andere zu ersetzen. In dem Makro:

SOURCE = f1.cpp f2.cpp f3.cpp

können Sie beispielsweise die Zeichen .cpp durch die Zeichen .obj ersetzen. Der Befehl dazu lautet:

$(SOURCE:.cpp=.obj)

Diese Ersetzung definiert das Makro nicht neu.

Regeln für Ersetzungen in Makros:

  • Syntax: $(MakroName:Originaltext=Neuer_Text).
  • Keine Leerzeichen vor oder nach dem Doppelpunkt.
  • Die Zeichen im Parameter Originaltext müssen exakt mit denen in der Makrodefinition übereinstimmen. Groß- und Kleinschreibung wird berücksichtigt.

Makros können auch innerhalb von Ersetzungsmakros verwendet werden. Zum Beispiel:

MYEXT=.C
SOURCE=f1.cpp f2.cpp f3.cpp
$(SOURCE:.cpp=$(MYEXT)) #ändert 'f1.cpp' in 'f1.C', etc.

Das Caret-Zeichen (^) bewirkt, dass MAKE das nächste Zeichen buchstäblich interpretiert. Dies lässt sich zum Einfügen eines Wagenrücklaufzeichens verwenden. Zum Beispiel:

MYEXT=.C
SOURCE=f1.cpp f2.cpp f3.cpp
($(SOURCE):.cpp=$(MYEXT)^
)       # ändert 'f1.cpp f2.cpp f3.cpp' in:
        # f1.C
        # f2.C
        # f3.C

Das Caret-Zeichen (^) teilt MAKE hier mit, dass jedes Vorkommen von .cpp in .C gefolgt von einem Wagenrücklaufzeichen geändert werden soll.

Dies lässt sich zum Anlegen von expliziten Regeln verwenden, die Response-Dateien für TLIB.EXE erzeugen.

myfile.lib: file1.obj file2.obj file3.obj
TLIB $@ @&&!
+-$(**: = &^
+-)
!

MAKE ersetzt hier alle Leerzeichen in der Liste der abhängigen Dateien durch ein Leerzeichen, gefolgt von einem Ampersand (&), einem Wagenrücklaufzeichen und den Zeichen +-. Die daraus resultierende Response-Datei sieht folgendermaßen aus:

+-file1.obj &
+-file2.obj & 
+-file3.obj & 
+-

Vordefinierte MAKE-Makros

MAKE umfasst mehrere vordefinierte Makros, die Sie in Ihren MAKE-Dateien einsetzen können. Die folgende Tabelle enthält die Makrodefinitionen und das Ergebnis einer Erweiterung bei expliziten und impliziten Regeln.

Makro Bei impliziter Regel Bei expliziter Regel
$*

Pfad\Quelldatei

Pfad\Zieldatei

$<

Pfad\Quelldatei+Erw.

Pfad\Zieldatei+Erw.

$:

Pfad für Quelldateien

Pfad für Zieldateien

$.

Quelldatei+Erw.

Zieldatei + Erw.

$&

Quelldatei

Zieldatei

$**

Pfad\Quelldatei+Erw.

Alle Quelldateien+Erw.

$?

Pfad\Quelldatei+Erw.

Veraltete Quelldateien


Makro Erweitert zu Bemerkung
_ _MSDOS_ _

1

Falls MAKE unter DOS läuft

_ _MAKE_ _

0x0370

Hexadezimale MAKE-Versionsnummer

MAKE

make

Name der ausführbaren Datei von MAKE

MAKEFLAGS

Optionen

Optionen der Befehlszeile

MAKEDIR

Verzeichnis

Verzeichnis, in dem MAKE.EXE gespeichert ist

Vordefinierte MAKE-Makros verändern

Wenn kein vordefiniertes Makros genau den gewünschten String liefert, können Sie mit Makro-Modifizierern Teile eines Strings extrahieren. Diese Modifizierer werden normalerweise mit $< oder $@ verwendet.

Die Syntax zum Ändern eines vordefinierten Makros lautet:

$(MakroName [Modifizierer])

Die folgende Tabelle enthält die Modifizierer und führt Verwendungsbeispiele dazu auf.

Modifizierer Erweiterung enthält Beispiel Ergebnis
D

Laufwerk und Verzeichnis

$(<D)
C:\PROJECTA\
F

Dateiname und Erweiterung

$(<F)
MYSOURCE.C
B

Nur Dateiname

$(<B)
MYSOURCE
R

Laufwerk, Verzeichnis und Dateiname

$(<R)
C:\PROJA\SOURCE

Siehe auch