Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Optionen zur Auswahl von Übersetzungsphasen

&pagelevel(4)&pagelevel

Bei Angabe einer der folgenden Optionen wird generell der Bindelauf unterdrückt. Ggf. angegebene Binder-Optionen und -Operanden werden ignoriert.

-c

Der Compilerlauf wird beendet, nachdem für jede übersetzte Quelldatei ein LLM erzeugt und in eine Objektdatei datei.o abgelegt wurde. Die Objektdatei wird standardmäßig in das aktuelle Dateiverzeichnis geschrieben. Mit der Option -o (siehe "Allgemeine Optionen") kann ein anderer Dateiname und/oder ein anderes Dateiverzeichnis vereinbart werden.

-E

Der Compilerlauf wird nach der Präprozessorphase beendet. Das Ergebnis wird auf die Standardausgabe stdout geschrieben. Dabei werden Leerzeilen zusammengefasst, und es werden entsprechende #line-Anweisungen generiert. Standardmäßig werden die C- bzw. C++-Kommentare in der Präprozessorausgabe entfernt (siehe Option -C, "Präprozessor-Optionen"). Bei Angabe der Option -o (siehe "Allgemeine Optionen") wird das Präprozessorergebnis statt auf die Standardausgabe stdout in eine Datei geschrieben.

-M

Der Compilerlauf wird nach der Präprozessorphase beendet. Anstelle einer normalen Präprozessorausgabe (vgl. -E, -P) wird eine Liste von Dateiabhängigkeitszeilen generiert und auf die Standardausgabe stdout geschrieben. Diese Liste ist für die Weiterverarbeitung mit dem POSIX-Programm make geeignet. Bei Angabe der Option -o (siehe "Allgemeine Optionen") wird die Dateiabhängigkeitsliste statt auf die Standardausgabe stdout in eine Datei geschrieben.
Hinweis
Templates in C++ 2017, C++ 2020 und C++ V3-Quellen werden nicht implizit inkludiert.

-P

Der Compilerlauf wird nach der Präprozessorphase beendet. Das Ergebnis wird aber nicht wie bei der Option -E auf die Standardausgabe stdout, sondern in eine Datei datei.i (cc/c11/c89-Kommando) bzw. datei.I (CC-Kommando) geschrieben und im aktuellen Dateiverzeichnis abgelegt. Die Ausgabe enthält keine zusätzlichen #line-Anweisungen. Standardmäßig werden die C- bzw. C++-Kommentare in der Präprozessorausgabe entfernt (siehe Option -C, "Präprozessor-Optionen"). datei .i kann später mit den cc/c11/c89/CC-Kommandos weiterübersetzt werden, datei.I nur mit dem CC-Kommando. Mit der Option -o (siehe "Allgemeine Optionen") kann ein anderer Dateiname und/oder ein anderes Dateiverzeichnis vereinbart werden.

-y

Diese Option kann nur beim CC-Kommando in den Modi C++ 2017, C++ 2020 und C++ V3 angegeben werden.
Der Compilerlauf wird nach der Prälinker-Phase (automatische Template-Instanziierung) beendet. Pro übersetzte Quelldatei wird eine Objektdatei quelldatei.o generiert, in der die Templates instanziiert sind. Dies ist bei Objekten sinnvoll, die später in eine Bibliothek (.a- Bibliothek) oder in eine vorgebundene Objektdatei (-r) aufgenommen werden sollen; für Templates innerhalb von Bibliotheken oder vorgebundenen Objektdateien wird keine automatische Instanziierung durchgeführt. Die Verwendung der Option -y ist nur im voreingestellten automatischen Instanziierungsmodus (-T auto) zweckmäßig.

Beispiel

Inhalt der Quelldateien (Auszüge):

// a.h:

class A {int i;};

// f.h:

template <class T> void f(T)
{
   /* beliebiger Code */
}

// b.c:

#include "a.h"
#include "f.h"
void foo() {
   A a;
   f(a);
}

// main.c:

extern void foo();

int main(void)
{
   foo();
}

Kommandos:

CC -c b.c

Bei der ersten Übersetzung werden eine Objektdatei b.o und eine Template-Informationsdatei b.o.ii generiert, jeweils mit dem Eintrag, dass die Funktion f(A) nicht instanziiert ist.

CC -y b.o

Es werden die bei der ersten Übersetzung generierten Dateien b.o und b.o.ii aktualisiert und die Funktion f(A) instanziiert.

ar -r x.a b.o

Das Modul in b.o wird in die Bibliothek x.a aufgenommen.

CC main.c x.a

Es wird eine ausführbare Datei a.out generiert.

Die folgende Kommandofolge würde dagegen nicht zum gewünschten Ziel führen:


rm *.o *.ii *.a a.out   /* Bereinigung des aktuellen Verzeichnisses */
CC -c b.c
ar -r x.a b.o
CC main.c x.a

Diese Kommandofolge führt zu einer Fehlermeldung, da für die Templates in der Bibliothek x.a keine automatische Instanziierung durchgeführt wird und die Funktion f(A) deshalb nicht gefunden werden kann.