MAKE.EXE

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Befehlszeilenhilfsprogramme - Index

MAKE.EXE ist ein über die Befehlszeile gesteuertes Hilfsprogramm, das die Compilierung und das Linken eines Projekts vereinfacht. MAKE ist jedoch nicht nur für diese Zwecke vorgesehen, sondern ist auch ein universelles Tool, das Befehle ausführt, die sich nach Dateiabhängigkeiten richten. Das Erstellen eines Projekts wird beschleunigt, da nur diejenigen Dateien neu compiliert werden, die sich seit der letzten Compilierung geändert haben. Zusätzlich können bestimmte Regeln aufgestellt werden, um spezielle Anforderungen Ihres Projekts zu berücksichtigen.

Grundlagen von MAKE

Zusätzlich zu den Voreinstellungen berücksichtigt MAKE bestimmte Regeln, die festlegen, wie die Dateien in Ihrem Projekt compiliert werden sollen. Dies betrifft zum Beispiel Debug-Informationen und Datumsvergleiche compilierter OBJ-Dateien. Wenn die Compilierung eines Moduls erzwungen werden soll, kann der Zeitstempel mit TOUCH.EXE geändert werden, so dass das Modul in den Build-Vorgang einbezogen wird.

In einer MAKE-Datei im ASCII-Format hinterlegen Sie explizite und implizite Regeln für die Behandlung der einzelnen Dateien des Projekts. Von diesen Regeln hängt dann ab, ob ein Befehl für eine bestimmte Datei oder eine Gruppe von Dateien ausgeführt wird. Zwar betreffen die Regeln meist das Compilieren und Linken, es kann aber nahezu jeder Betriebssystembefehl mit MAKE ausgeführt werden.

Befehlszeilensyntax

MAKE [<Optionen>...] [<Ziel>[<Ziel>]] 

Der Befehl MAKE muss von den Optionen und den Zielargumenten durch Leerzeichen getrennt werden.

Bei der Angabe der Ziele sind Platzhalterzeichen zulässig (z.B. * und ?), so dass eine ganze Gruppe von Dateien angegeben werden kann.


Befehlszeilenelemente

Element Beschreibung
<Optionen>

MAKE-Optionen, die die Arbeitsweise von MAKE beeinflussen. Siehe “MAKE-Optionen” in diesem Thema.

<Ziel>

Der Name einer Zieldatei, die in der MAKE-Datei aufgelistet ist.


Um die Hilfe für die Befehlszeile anzuzeigen, geben Sie Folgendes ein:

make -?

oder:

make -h

Befehlszeilenoptionen

Die Befehlszeilenoptionen steuern das Verhalten von MAKE. Bei MAKE-Optionen wird zwischen Groß- und Kleinschreibung unterschieden. Jeder Option muss ein Bindestrich (-) oder ein Schrägstrich (/) vorangestellt werden.

Der Befehl MAKE muss von den Optionen und den Zielargumenten durch Leerzeichen getrennt werden. Bei der Angabe der Ziele sind Platzhalterzeichen zulässig (z.B. * und ?), so dass eine ganze Gruppe von Dateien angegeben werden kann.

Für viele der Befehlszeilenoptionen gibt es gleichwertige Direktiven, die in der MAKE-Datei benutzt werden dürfen.

MAKE.EXE unterstützt die in der folgenden Tabelle aufgeführten Befehlszeilenoptionen:

Befehlszeilenoptionen für MAKE

Option Beschreibung

-h oder -?

Zeigt die Befehlszeilenhilfe für die MAKE-Optionen an. Standardeinstellungen werden durch ein vorangestelltes Pluszeichen dargestellt.

-a

Bewirkt eine Abhängigkeitsprüfung von Include-Dateien (auch von verschachtelten), von denen eine .OBJ-Datei abhängt und aktualisiert diese OBJ-Datei, falls die .h-Dateiverändert wurde. Siehe auch die Option -c.

-B

Erzeugt alle Zieldateien ohne Berücksichtigung von Datums-/Zeitstempeln.

-c

Speichert alle Informationen der Abhängigkeitsprüfung zwischen, wodurch die MAKE-Ausführung beschleunigt werden kann. Verwenden Sie diese Option zusammen mit -a. Verwenden Sie diese Option nicht, wenn MAKE Include-Dateien verändert. Dies kann der Fall sein, wenn in der MAKE-Datei TOUCH aufgerufen wird oder wenn MAKE Header- oder Include-Dateien erzeugt.

-D<Makro>

Definiert "Makro" als einzelnes Zeichen, so dass ein Ausdruck !ifdef-Makro in der MAKE-Datei den Wert true ergibt.

[-D]<Makro>=[<String>]

Definiert <Makro> als <String>. Wenn <String> Leerzeichen oder Tabulatoren enthält, setzen Sie <String> in Anführungszeichen. -D und <String> sind optional.

-d<Verzeichnis>

Bestimmt das Laufwerk und das Verzeichnis für die Auslagerung von MAKER (Real Mode-Version von MAKE) aus dem Speicher. Diese Option muss mit -S verwendet werden. MAKE ignoriert diese Option.

-e

Ignoriert ein Makro, wenn sein Name mit dem einer Umgebungsvariable übereinstimmt. MAKE verwendet die Umgebungsvariable anstelle des Makros.

-f<Dateiname>

Verwendet <Dateiname> oder <Dateiname>.MAK anstelle von MAKEFILE (ein Leerzeichen nach -f ist optional.)

-I<Verzeichnis>

Sucht Include-Dateien zuerst im aktuellen Verzeichnis, dann in dem Verzeichnis, das Sie mit dieser Option angeben.

-i

Ignoriert den Exit-Status aller Programme, die in der MAKE-Datei aufgerufen wurden und setzt der Build-Prozess fort.

-K

Behält temporäre Dateien bei (normalerweise werden sie von MAKE gelöscht).

-m

Zeigt für jede verarbeitete Datei Datum und Uhrzeit an.

-n

Zeigt die MAKE-Befehle an, führt sie aber nicht aus. Dies ist bei der Fehlersuche hilfreich.

-N

Simuliert das Microsoft-Dienstprogramm NMAKE.

-p

Zeigt vor der Ausführung der MAKE-Datei alle Makrodefinitionen und impliziten Regeln an.

-q

Gibt 0 zurück, wenn die Zieldatei aktuell ist, andernfalls einen Wert ungleich Null (für die Verwendung in Stapeldateien).

-r

Ignoriert alle Regeln, die in BUILTINS.MAK definiert sind. (Siehe BUILTINS.MAK in diesem Thema.)

-s

Unterdrückt die Befehlsanzeige auf dem Bildschirm (silent).

-S

Lagert MAKER aus dem Speicher aus, während Befehle ausgeführt werden. Damit wird der Bedarf an Arbeitsspeicher reduziert, und es können umfangreiche Module compiliert werden. MAKE ignoriert diese Option.

-U<Makro>

Hebt die vorangegangene Makrodefinition von <Makro> auf.

-W<Dateiname>

Schreibt MAKE in die Datei <Dateiname>, wobei alle Nicht-String-Optionen aktualisiert werden.


Um beispielsweise die Datei PROJECTA.MAK als MAKE-Datei einzusetzen, geben Sie Folgendes ein:

MAKE -fPROJECTA.MAK

Voreinstellungen von MAKE

Wenn Sie einen MAKE-Befehl eingeben, wird die Datei BUILTINS.MAK gesucht, in der die Standardregeln gespeichert sind (mit der Option -r können diese Vorgaben ignoriert werden). MAKE sucht nach der Datei zuerst im aktuellen Verzeichnis und dann in dem Verzeichnis, in dem MAKE gespeichert ist. Nachdem BUILTINS.MAK geladen ist, wird nach einer Datei namens MAKEFILE oder MAKEFILE.MAK gesucht (mit der Option -f kann auf eine andere Datei als MAKEFILE verwiesen werden). Wenn keine dieser Dateien gefunden werden kann, wird eine Fehlermeldung ausgegeben.

Konnte die MAKE-Datei erfolgreich geladen werden, versucht MAKE, nur die erste, explizit angegebene Zieldatei zu erstellen. Dazu werden Datum und Uhrzeit der von ihr abhängigen Dateien überprüft. Wenn abhängige Dateien jünger als die Zieldatei sind, führt MAKE entsprechende Befehle zur Aktualisierung der Zieldatei aus.

Wenn eine der Dateien, die von der ersten Zieldatei abhängig sind, an anderer Stelle in der MAKE-Datei als Ziel auftaucht, überprüft MAKE die Abhängigkeiten dieses Ziels und erstellt es, bevor die erste Zieldatei erstellt wird. Diese Form der Verschachtelung wird verkettete Abhängigkeitsprüfung genannt.

Wenn das Erstellen einer Zieldatei fehlschlägt, löscht MAKE diese Zieldatei. Die Direktive .precious bewirkt, dass MAKE die Zieldatei trotz Auftreten eines Fehlers beibehält.

Mit der Tastenkombination STRG+PAUSE oder STRG+C kann ein MAKE-Befehl abgebrochen werden.

MAKE-Dateien

Eine MAKE-Datei ist eine ASCII-Datei mit einer Reihe von Anweisungen zum Erstellen eines bestimmten Projekts. MAKE setzt zunächst voraus, dass die Datei MAKEFILE oder MAKEFILE.MAK heißt, mit der Option -f kann aber ein anderer Dateiname vergeben werden.

MAKE erstellt entweder die Zieldateien, die mit dem MAKE-Befehl festgelegt wurden, oder die erste Zieldatei, die in der MAKE-Datei angegeben ist. Wenn mehrere Zieldateien erstellt werden sollen, verwenden Sie in der MAKE-Datei ein symbolisches Ziel.

MAKE-Dateien können Folgendes enthalten:

  • Kommentare (eingeleitet durch ein Nummernzeichen #)
  • Explizite und implizite Regeln
  • Makros
  • Direktiven

Symbolische Ziele

Ein symbolisches Ziel bewirkt, dass MAKE mehrere Zieldateien auf Basis einer einzigen MAKE-Datei erstellt. Wenn Sie ein symbolisches Ziel angeben, führt der Abhängigkeitsstrang alle Ziele auf, die erstellt werden sollen (ein symbolisches Ziel verwendet im Wesentlichen verkettete Abhängigkeiten zum Erstellen von mehreren Zieldateien). (Siehe "verkettete Abhängigkeitsprüfung" im Abschnitt Voreinstellungen von MAKE dieses Themas.)

Im folgenden Beispiel enthält die MAKE-Datei das symbolische Ziel AllFiles, um die Dateien FILE1.EXE und FILE2.EXE zu erstellen:

AllFiles: file1.exe file2.exe  #Beachten Sie, dass AllFiles keine Befehle hat 
file1.exe: file1.obj        
  bcc32 file1.obj
file2.exe: file2.obj
  bcc32 file2.obj

Regeln für symbolische Ziele

Beachten Sie bei der Verwendung von symbolischen Zielen die folgenden Regeln:

  • Geben Sie nach der Zeile mit dem symbolischen Ziel keine Befehle ein.
  • Jedes symbolische Ziel muss einen eindeutigen Namen besitzen. Dies darf nicht der Name einer Datei im aktuellen Verzeichnis sein.
  • Die Dateinamen für symbolische Ziele müssen den Konventionen des Betriebssystems entsprechen.

BUILTINS.MAK

Sie können die optionale Datei BUILTINS.MAK erstellen und darin die Standardregeln und -makros speichern, die MAKE beim Erstellen der Ziele in einer MAKE-Datei verwenden soll. Soll diese Datei ignoriert werden, geben Sie die Option -r an.

Im Folgenden finden Sie ein Beispiel einer BUILTINS.MAK-Datei:

#
# C++Builder BUILTINS.MAK
#

CC = bcc32
RC = brcc32
AS = tasm32

.asm.obj:
    $(AS) $(AFLAGS) $&.asm

.c.exe:
    $(CC) $(CFLAGS) $&.c

.c.obj:
    $(CC) $(CFLAGS) /c $&.c

.cpp.exe:
    $(CC) $(CFLAGS) $&.cpp

.cpp.obj:
    $(CC) $(CPPFLAGS) /c $&.cpp

.rc.res:
    $(RC) $(RFLAGS) /r $&

.SUFFIXES: .exe .obj .asm .c .res .rc

!if !$d(BCEXAMPLEDIR)
BCEXAMPLEDIR = $(MAKEDIR)\..\EXAMPLES

!endif 


Siehe auch