Compilieren
Nach oben zu Delphi-Compiler
Inhaltsverzeichnis
Projekt > Optionen > Delphi-Compiler > Compilieren
Auf dieser Seite legen Sie die Compiler-Optionen für das aktuelle Projekt fest.
- Hinweis: Nicht alle der hier beschriebenen Optionen stehen für alle Projekttypen zur Verfügung. Zum Beispiel ist die Option DCP-Ausgabeverzeichnis nicht für C++-Projekte verfügbar.
Optionen | Beschreibung |
---|---|
Ziel, Übernehmen, Speichern |
Siehe Optionen für das Ziel. |
Gemeinsame Elemente |
Optionen für die Quelltexterzeugung
Element | Beschreibung | Compiler-Optionen | Alle Plattformen werden unterstützt (sofern nicht anders angegeben) |
---|---|---|---|
Steuerung des Code-Inlining |
Setzt oder entfernt die Delphi-Compiler-Direktive Vorgabe = Aus |
|
|
Codeseite |
Geben Sie die Codeseite für die Sprache der Anwendung ein (z. B. 1252). Die Codeseite wird als Dezimalzahl angegeben, die eine bestimmte Zeichencodierungstabelle bezeichnet. Es gibt Standardwerte für zahlreiche Sprachen. Vorgabe = 0 |
|
|
Laufzeittypinformationen ausgeben |
Steuert die Erzeugung von Laufzeittypinformationen. Der Vorgabewert ist False (es werden keine Laufzeittypinformationen ausgegeben). Vorgabe = False |
|
|
Mindestgröße für Enum |
Legt die Mindestgröße des Arbeitsspeichers fest, der für ein Enum zugewiesen wird. Byte {$Z1}, Word {$Z2} und Double Word {$Z4} sind möglich. Die Popup-Schaltfläche ist unter Gemeinsame Elemente auf den Projektoptionsseiten beschrieben. Vorgabe = Byte |
|
|
Optimierung |
Steuert die Codeoptimierung. Wenn diese Option aktiviert ist (entspricht {$O+}), führt der Compiler eine Reihe von Codeoptimierungen durch, wie z. B. Variablen in CPU-Register setzen, allgemeine Unterausdrücke entfernen und Induktionsvariablen erzeugen. Bei deaktivierter Option (entspricht {$O-}) werden diese Optimierungen nicht ausgeführt. Außer in bestimmten Testsituationen sollte die Codeoptimierung immer aktiviert sein. Die Optimierungen des Delphi-Compilers führen zu keinerlei Änderungen der Funktionsweise des Programms. Der Compiler führt also keine "unsicheren" Optimierungen durch, die die besondere Aufmerksamkeit des Programmierers erfordern. Mit dieser Option können Optimierungen nur für eine gesamte Prozedur oder Funktion aktiviert oder deaktiviert werden. Dies ist nicht für bestimmte Zeilen innerhalb einer Routine möglich. Vorgabe = False |
|
|
Pentium-sicheres FDIV |
Steuert die Erzeugung von Gleitkommacode, der vor der fehlerhaften FDIV-Anweisung schützt, die in bestimmten (frühen) Pentium-Prozessoren enthalten ist. Windows 95, Windows NT 3.51 und neuere Versionen des Windows-Betriebssystems enthalten Code, der den Pentium-FDIV-Fehler korrigiert und das System schützt. Wenn die Option aktiviert ist (entspricht der Compiler-Direktive {$U+}), werden alle Gleitkommadivisionen mit einer Laufzeitbibliotheksroutine ausgeführt. Beim ersten Aufruf einer Gleitkommadivision prüft die Routine, ob die FDIV-Anweisung des Prozessors korrekt arbeitet, und aktualisiert die in der Unit System deklarierte Variable TestFDIV entsprechend. Der Wert von TestFDIV bestimmt bei den folgenden Gleitkommadivisionen, wie vorzugehen ist:
Bei Pentium-Prozessoren, die keine fehlerhafte FDIV-Anweisung enthalten, bewirkt die Aktivierung dieser Option nur eine geringfügige Leistungsminderung. Bei fehlerhaften Pentium-Prozessoren können Gleitkommadivisionen bei aktivierter Option bis zu dreimal länger dauern, liefern aber stets korrekte Ergebnisse. Bei deaktivierter Option (entspricht {$U-}) werden Gleitkommadivisionen durch Inline-FDIV-Anweisungen ausgeführt. Sie garantieren optimale Ausführungsgeschwindigkeiten und Codegrößen, können auf fehlerhaften Pentium-Prozessoren jedoch falsche Ergebnisse liefern. Sie sollten daher die Option nur deaktivieren, wenn Sie sicher sind, dass der Code auf fehlerfreien Pentium-Prozessoren ausgeführt wird. Vorgabe = False |
|
|
Record-Felder ausrichten |
Steuert die Ausrichtung von Feldern in Record-Typen und Klassenstrukturen von Delphi. Klicken Sie auf den nach unten weisenden Pfeil, um einen Wert auszuwählen:
Variablen und typisierte Konstanten werden unabhängig von der Direktive $A immer für einen optimalen Zugriff ausgerichtet. Die Ausführung ist schneller, wenn Sie die Option auf 8 (Quad Word) setzen. |
|
|
Stack-Frames |
Steuert die Erzeugung von Stack-Frames für Prozeduren und Funktionen. Wenn die Option aktiviert ist (entspricht {$W+}), werden Stack-Frames für Prozeduren und Funktionen auch dann erzeugt, wenn sie nicht benötigt werden. Bei deaktivierter Option (entspricht {$W-}), werden Stack-Frames nur generiert, wenn die Verwendung lokaler Variablen durch die Routine dies erfordert. Normalerweise wird der Status {$W+} nur für bestimmte Debugger-Tools benötigt, die eine Erzeugung von Stack-Frames für alle Prozeduren und Funktionen verlangen. |
|
|
Optionen für das Debuggen
Element | Beschreibung | Compiler-Optionen | Alle Plattformen werden unterstützt (sofern nicht anders angegeben) |
---|---|---|---|
Assertion |
Aktiviert oder deaktiviert die Erzeugung von Assertion-Code in einer Delphi-Quelltextdatei. Die Option ist standardmäßig aktiviert (entspricht {$C+}). Da in Auslieferungsversionen eines Produkts normalerweise zur Laufzeit keine Assertions verwendet werden, sind Compiler-Direktiven vorhanden, die die Erzeugung von Code für Assertions deaktivieren. Deaktivieren Sie diese Option, um Assertions zu deaktivieren. |
|
|
Debug-Informationen |
Debug-Informationen enthalten für jede Prozedur eine Tabelle mit Zeilennummern, in der Adressen des Objektcodes als Zeilennummern im Quelltext dargestellt werden. Bei Units werden die Debug-Informationen in der Unit-Datei gemeinsam mit dem Objektcode der Unit aufgezeichnet. Durch die Debug-Informationen erhöht sich die Größe der Unit-Datei. Das Compilieren von Programmen, die diese Unit verwenden, erfordert deshalb mehr Speicher. Die Größe und die Ausführungsgeschwindigkeit des ausführbaren Programms werden aber nicht nachteilig beeinflusst. Wenn ein Programm oder eine Unit mit dieser Option (entspricht {$D+}) compiliert wird, können Sie das betreffende Modul mit dem integrierten Debugger in Einzelschritten testen und Haltepunkte setzen. Mit den Optionen Debug-Informationen in separate TDS-Datei ausgeben und Map-Datei (auf der Seite Linken des Dialogfelds Projektoptionen) können nur vollständige Zeileninformationen für Module erzeugt werden, die mit der aktivierter Option compiliert wurden. Diese Option wird normalerweise zusammen mit der Option Lokale Symbole (Schalter {$L}) eingesetzt, die die Erzeugung von lokalen Symbolinformationen für das Debugging steuert. |
|
|
Lokale Symbole |
Aktiviert oder deaktiviert die Erzeugung von Symbolinformationen. Klicken Sie auf den nach unten weisenden Pfeil, um einen Wert (True, False) auszuwählen. Lokale Symbolinformationen sind die Namen und Typen aller lokalen Variablen und Konstanten eines Moduls, also die Symbole im implementation-Abschnitt des Moduls und in seinen Prozeduren und Funktionen. Bei Units werden die lokalen Symbolinformationen zusammen mit dem Objektcode in der Unit-Datei gespeichert. Lokale Symbolinformationen vergrößern eine Unit-Datei. Das Compilieren von Programmen, die diese Unit verwenden, erfordert also mehr Speicher. Die Größe und die Ausführungsgeschwindigkeit der Programme werden aber nicht nachteilig beeinflusst. Wenn ein Programm oder eine Unit mit dieser Option (entspricht {$L+}) compiliert wird, können Sie die lokalen Variablen des Moduls im integrierten Debugger überprüfen und ändern. Außerdem können die Aufrufe von Prozeduren und Funktionen des Moduls über die Option Ansicht > Debug-Fenster > Aufruf-Stack überprüft werden. Mit den Optionen Debug-Informationen in separate TDS-Datei ausgeben und Map-Datei (auf der Seite Linken des Dialogfelds Projektoptionen) können nur lokale Symbolinformationen für Module erzeugt werden, die mit der aktivierter Option compiliert wurden. Diese Option wird normalerweise zusammen mit der Option Debug-Informationen eingesetzt, die die Erzeugung von Tabellen mit Zeilennummern zu Testzwecken steuert. Diese Option wird ignoriert, wenn die Option Debug-Informationen für den Compiler deaktiviert ist. |
|
|
Symbolreferenzinfo |
Erzeugt für den Quelltext- Editor und die Projektverwaltung Informationen zu Symbolreferenzen. Entspricht der Delphi-Compiler-Direktive {$Y}.
Diese Option ist nur wirksam, wenn Debug-Informationen und Lokale Symbole (siehe oben) aktiviert sind. Die Programmierhilfe und die Navigation durch Quelltext ( |
|
|
Mit Debug-DCUs |
Die DCU-Dateien enthalten Debug-Informationen und werden mit Stack-Frames erzeugt. Ist diese Option aktiviert, fügt der Compiler automatisch den im Feld Quellpfad für Debugger auf der Seite Embarcadero-Debugger angegebenen Suchpfaden den Debug-DCU-Pfad hinzu. |
||
Importierte Datenreferenzen verwenden |
Aktiviert gepackte Units zum Referenzieren von Variablen in anderen Packages. Entspricht der Delphi-Compiler-Direktive {$G}. |
|
|
Weitere Optionen
Element | Beschreibung | Compiler-Optionen | Alle Plattformen werden unterstützt (sofern nicht anders angegeben) |
---|---|---|---|
Weitere Optionen für die Übergabe an den Compiler |
Geben Sie Compiler-Optionen ein, die Sie den Einstellungen hinzufügen möchten, die vom Dialogfeld "Projekt > Optionen" gesteuert werden. Verwenden Sie als Optionssymbol einen Bindestrich, und trennen Sie die Optionen durch Komma. |
||
Universelle iOS-Binärdatei generieren (armv7 + arm64) |
Der Compiler erstellt eine universelle Binärdatei für 32-Bit- und 64-Bit-iOS.
|
| |
PIC-Code generieren |
Wenn diese Option aktiviert ist, erzeugt der Compiler positionsunabhängige Objektcode-Units (PIC, Position-Independent Code) mit der Dateierweiterung Vorgabe = False |
|
|
XML-Dokumentation erzeugen |
Erzeugt eine Datei, die die XML-Repräsentation in Ihrem Projektverzeichnis enthält. Weitere Informationen finden Sie unter XML-Dokumentation für Delphi-Code. |
|
|
Auch nach 8.3-Dateinamen suchen |
Übergibt die Compiler-Option Vorgabe = False Ermöglicht die Verwendung von DOS-Dateinamen im alten Stil, die im Format Dateiname.ext vorliegen. Dateiname kann 1 bis 8 Zeichen lang sein. Unterstützt auf 32-Bit- und 64-Bit-Windows-Plattformen. |
|
|
Unit-Abhängigkeitsinformationen ausgeben |
Übergibt die Compiler-Option Wenn Sie diese Option aktivieren, wird eine Liste der rekursiv einbezogenen (#include) Header samt Zeitstempel aller CPP-Dateien in die OBJ-Datei eingebettet. Mit diesen Informationen erzeugt das Build-System die OBJ-Datei neu, wenn einer der einbezogenen Header geändert wird. Wenn die Option deaktiviert ist, enthalten OBJ-Dateien keine Autoabhängigkeitsinformationen und werden beim Ändern von Headern nicht neu erzeugt. |
|
|
$IF muss mit $IFEND abgeschlossen werden |
Ermöglicht die Verwendung von $IFEND (anstatt des korrekten $ENDIF), um eine $IF-Klausel abzuschließen. Wenn diese Option nicht aktiviert ist, geben die Compiler eventuell den Fehler E2029 aus. Siehe die Compiler-Direktive LEGACYIFEND (Delphi). Vorgabe = False |
|
|
Ausgabeverzeichnis für XML-Dokumentation |
Gibt den Ordner an, in dem die XML-Dokumentation für das Projekt erzeugt wird. Siehe die Option XML-Dokumentation erzeugen weiter oben. |
|
Optionen für Laufzeitfehler
Element | Beschreibung | Compiler-Optionen | Alle Plattformen werden unterstützt (sofern nicht anders angegeben) |
---|---|---|---|
E/A-Prüfung |
Aktiviert oder deaktiviert die automatische Code-Erzeugung, die nach jedem Aufruf einer E/A-Prozedur das Ergebnis überprüft. Wenn eine E/A-Prozedur bei aktivierter Option ein Ergebnis ungleich 0 zurückgibt, führt dies zu einer EInOutError-Exception (bzw. zum Programmabbruch, wenn die Exception-Behandlung nicht aktiviert ist). Ist die Option deaktiviert, muss die E/A-Operation durch einen Aufruf von IOResult auf Fehler geprüft werden. |
|
|
Überlaufprüfung |
Steuert die Erzeugung von Code für die Überlaufprüfung. Wenn die Option aktiviert ist (entspricht {$Q+}), werden bestimmte arithmetische Integer-Operationen (+, -, *, Abs, Sqr, Succ, Pred, Inc und Dec) auf einen Überlauf geprüft. Dazu wird ihnen zusätzlicher Code hinzugefügt, der sicherstellt, dass das Ergebnis innerhalb des unterstützten Bereichs liegt. Das Fehlschlagen der Überlaufprüfung führt zu einer EIntOverflow-Exception (bzw. zum Programmabbruch, wenn die Exception-Behandlung nicht aktiviert ist). Diese Option wird normalerweise zusammen mit der Option zur Bereichsüberprüfung ({$R}) eingesetzt, die die Erzeugung von Bereichsprüfungscode aktiviert bzw. deaktiviert. Die Aktivierung der Überlaufsprüfung vergrößert und verlangsamt Programme. Vorgabe = False |
|
|
Bereichsüberprüfung |
Aktiviert oder deaktiviert die Erzeugung von Bereichsprüfungscode. Wenn die Option aktiviert ist (entspricht {$R+}), werden alle Ausdrücke, die Arrays und Strings indizieren, dahingehend überprüft, ob sie sich innerhalb der festgelegten Grenzen befinden. Der gleichen Prüfung werden alle Zuweisungen an skalare Variablen und Teilbereichsvariablen unterzogen. Das Fehlschlagen der Bereichsprüfung führt zu einer ERangeError-Exception (bzw. zum Programmabbruch, wenn die Exception-Behandlung nicht aktiviert ist). Die Aktivierung der Bereichsprüfung vergrößert und verlangsamt Programme. Vorgabe = False |
|
Optionen für die Syntax
Element | Beschreibung | Compiler-Optionen | Alle Plattformen werden unterstützt (sofern nicht anders angegeben) |
---|---|---|---|
Zuweisbare typisierte Konstanten |
Legt fest, ob typisierte Konstanten geändert werden können. Wenn die Option aktiviert ist (entspricht {$J+}), ist eine Änderung möglich. Typisierte Konstanten sind in diesem Fall mit initialisierten Variablen vergleichbar. Bei deaktivierter Option (entspricht {$J-}) sind typisierte Konstanten tatsächlich konstant. Jeder Versuch, sie zu ändern, führt zu einer Fehlermeldung des Compilers. Als schreibbar werden typisierte Konstanten bezeichnet, die zur Laufzeit als Variablen verwendet und somit geändert werden können. Deshalb muss älterer Quelltext, der änderbare typisierte Konstanten enthält, mit aktivierter Option compiliert werden, während für neue Anwendungen initialisierte Variablen verwendet werden sollten und der Quelltext mit deaktivierter Option compiliert werden sollte. Vorgabe = False |
|
|
Vollständige Boolesche Auswertung |
Schaltet zwischen zwei unterschiedlichen Modellen der Delphi-Quelltexterzeugung für die booleschen Operatoren AND und OR um. Wenn die Option aktiviert ist (entspricht {$B+}), erzeugt der Compiler Code für die vollständige Auswertung eines booleschen Ausdrucks. Das bedeutet, dass jeder Operand eines booleschen Ausdrucks, der mit den Operatoren AND und OR gebildet wird, garantiert ausgewertet wird, auch wenn das Ergebnis des gesamten Ausdrucks bereits feststeht. Bei deaktivierter Option (entspricht {$B-}) generiert der Compiler Code für die Kurzschlussauswertung boolescher Ausdrücke, d. h. die Auswertung wird beendet, sobald das Ergebnis des gesamten Ausdrucks feststeht (die Auswertung erfolgt immer von links nach rechts). Vorgabe = False |
|
|
Erweiterte Syntax |
Dient nur der Abwärtskompatibilität. Verwenden Sie diese Option (entspricht {$X-}) nicht in Ihren Delphi-Anwendungen. Mit dieser Option wird die erweiterte Syntax von Delphi aktiviert oder deaktiviert: Funktionsanweisungen. Im Modus {$X+} können Funktionsaufrufe als Prozedurenaufrufe verwendet werden, d. h. das Ergebnis eines Funktionsaufrufs kann ignoriert werden, anstatt an eine andere Funktion übergeben oder in einer Operation bzw. Zuweisung verwendet zu werden. Im Allgemeinen werden die von einer Funktion ausgeführten Berechnungen durch das Funktionsergebnis repräsentiert, das nicht ignoriert werden sollte. Manchmal führen Funktionen aber lediglich eine bestimmte Operation durch (z. B. einer globalen Variablen einen Wert zuweisen) und geben keinen Wert zurück, der weiterverwendet werden kann. Result-Variable. Wenn die Option aktiviert ist (entspricht {$X+}), kann die vordefinierte Result-Variable für den Rückgabewert der Funktion verwendet werden. Nullterminierte Strings. Wenn diese Option aktiviert ist, können Delphi-Strings nullbasierten Zeichen-Arrays (array[0..X] of Char) zugewiesen werden, die mit PChar-Typen kompatibel sind. Vorgabe = True |
|
|
Standardmäßig lange Strings |
Diese Option (entspricht der Direktive {$H}) legt fest, welche Bedeutung das reservierte Wort string hat, wenn es ohne Zusatz in einer Typdeklaration steht. Der generische Typ string kann entweder einen langen, dynamisch zugewiesenen String (fundamentaler Typ Alle Objekte in der Komponentenbibliothek werden in diesem Status compiliert. Für neue Komponenten sollten ebenfalls lange Strings verwendet werden. Dasselbe gilt für Quelltext, der Daten aus String-Eigenschaften der Komponentenbibliothek übernimmt. Die deaktivierte Option (entspricht {$H-}) ist sinnvoll, wenn auf Quelltext aus älteren Versionen von Delphi zugegriffen wird, in dem standardmäßig kurze Strings verwendet werden. Die Bedeutung von String-Typdefinitionen kann lokal überschrieben werden, um die Erzeugung kurzer Strings sicherzustellen. Außerdem können kurze String-Typen als Vorgabe = True |
|
|
Offene Parameter |
Ist nur für Quelltext von Bedeutung, der mit Huge-Strings compiliert wurde. Diese Option dient der Abwärtskompatibilität mit früheren Versionen von Delphi und Object Pascal. Diese Option (entspricht der Direktive {$P}) legt die Bedeutung von Variablenparametern fest, die mit dem Schlüsselwort "string" im Status {$H-} (Huge-Strings deaktiviert) deklariert wurden. Bei deaktivierter Option (entspricht {$P-}) sind mit dem Schlüsselwort "string" deklarierte Variablenparameter normale Variablenparameter. Dagegen werden sie im Status {$P+} als offene String-Parameter behandelt. Der Bezeichner "OpenString" kann unabhängig von der Einstellung der Direktive $P immer zur Deklaration von offenen String-Parametern verwendet werden. Vorgabe = True |
|
|
Strenge VAR-Strings-Prüfung |
Diese Option (entspricht der Direktive {$V}) ist nur für Delphi-Quelltext von Bedeutung, in dem kurze Strings verwendet werden. Sie dient der Abwärtskompatibilität mit früheren Versionen von Delphi und Object Pascal. Die Option steuert den Typ für kurze Strings, die als Variablenparameter übergeben werden. Wenn die Option aktiviert ist (entspricht {$V+}), wird eine strenge Typprüfung durchgeführt, d. h. formale und tatsächliche Parameter müssen denselben String-Typ haben. Bei deaktivierter Option (entspricht {$V-}) kann eine Variable eines kurzen String-Typs selbst dann als Parameter verwendet werden, wenn die deklarierte Maximallänge nicht mit der des formalen Parameters übereinstimmt. Vorgabe = True |
|
|
Typisierter @-Operator |
Steuert die vom Operator @ generierten Zeigertypen und deren Kompatibilität. Bei deaktivierter Option (entspricht {$T-}) ist das Ergebnis des Operators @ immer ein Zeiger ohne Typ (Pointer), der mit allen übrigen Zeigertypen kompatibel ist. Wenn @ für einen Variablenverweis (entspricht {$T+}) verwendet wird, ist das Ergebnis ein typisierter Zeiger, der nur mit Pointer und anderen Zeigern auf den Variablentyp kompatibel ist. Bei deaktivierter Option sind bestimmte Zeigertypen (keine Pointer-Typen) nicht kompatibel (auch wenn sie Zeiger auf denselben Typ sind). Bei aktivierter Option sind Zeiger auf denselben Typ kompatibel. Vorgabe = False |
|
Tipp: Wenn bei der Compilierung eines Projekts die Compiler-Optionen im Fenster Meldungen angezeigt werden sollen, wählen Sie Tools > Optionen > Umgebungsoptionen und aktivieren die Option Befehlszeile anzeigen. Beim nächsten Compilieren eines Projekts werden der Befehl, der zur Compilierung des Projekts verwendet wurde, und die Antwortdatei im Fenster Meldungen angezeigt. In der Antwortdatei sind die Compiler-Optionen und die zu compilierenden Dateien aufgeführt.