Compilieren
Nach oben zu Delphi-Compiler
Inhaltsverzeichnis
Projekt > Optionen > Erzeugen > Delphi-Compiler > Compilieren
Auf dieser Seite legen Sie die Compiler-Optionen für das aktuelle Projekt fest.
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 |
|
|
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 |
|
|
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. |
||
Programmierhilfe prüft in uses-Klausel auch .dcus |
Die Programmierhilfe Hinweis: Die Funktion arbeitet auch mit .pas- und .dcu-Dateien. Diese Funktion kann in den Projektoptionen auf Plattformebene deaktiviert werden.
Es sind zwei Modi verfügbar, wenn Sie Programmierhilfe in einem uses-Abschnitt anfordern:
Wenn Sie die Option "Programmierhilfe prüft in uses-Klausel auch .dcus" deaktivieren, wechseln Sie in den Modus 1. Das ist in Umgebungen hilfreich, in denen der Suchpfad Verzeichnisse mit einer Vielzahl DCUs enthält, die mit der aktuellen Plattform inkompatibel sind. Zum Beispiel: Sie entwickeln eine App für Win32 und MacOS. Auf beiden Plattformen enthält der Suchpfad viele Verzeichnisse, die Win32-DCUs enthalten. Wenn Ihre aktuelle Plattform MacOS ist, fordern Sie Programmierhilfe für "uses" an. Um dann keine Win32-Units anzuzeigen, deaktivieren Sie das Vorschlagen von DCUs unter MacOS. |
||
Unsicheren Code zulassen |
Der Begriff "unsicher" stammt aus .NET, wo "unsicher" "nicht verwaltet" bedeutet, das heißt, Code, der direkt auf den Arbeitsspeicher anstatt über "verwalteten" Code und "verwaltete" Datenstrukturen zugreift. "Verwalteter" Code und "verwaltete" Datenstrukturen in der .NET-Umgebung verursachen höchstwahrscheinlich keine Speicherfehler oder Ressourcenlecks. Da Assembly-Anweisungen weder typisiert noch "verwaltet" sind und fast immer direkt auf den Arbeitsspeicher zugreifen, werden sie von den .NET-Standards ausnahmslos als "unsicher" angesehen. Selbstverständlich ist Assembly-Code sicher, wenn er korrekt geschrieben ist. In Delphi gibt es drei Warnungen zu unsicherem Code, damit Code leichter von Win32 und .NET gemeinsam genutzt werden kann. Wenn Meldungen zu unsicherem Code für Sie nicht relevant sind, können Sie die Warnungen auf der Seite Hinweise und Warnungen des Dialogfelds "Projektoptionen" deaktivieren. Einzelheiten finden Sie unter: |
|
|
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 |
|
|
Unit-Abhängigkeitsinformationen ausgeben |
Übergibt die Compiler-Option Hinweis: Diese Option ist nur für den Befehlszeilen-Compiler anwendbar. Um eine Abhängigkeit für ein Projekt in der IDE zu erzeugen, ist es erforderlich, "MSBuild extern für die Compilierung verwenden" auf
true festzulegen. |
|
|
$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. |
|
|
Anwendungspakets für Android 32 Bit und 64 Bit (armeabi-v7a + arm64-v8a) generieren |
Der Compiler erstellt ein Anwendungspaket, das sowohl 32-Bit- als auch 64-Bit-Android-Binärdateien enthält. Vorgabe = False (nur eine 64-Bit-Binärdatei wird erstellt). |
| |
Universelle macOS-Binärdatei generieren (x86_64 + arm64) |
Der Compiler erstellt eine universelle Binärdatei für sowohl 64-Bit-Intel.macOS als auch 64-Bit-ARM-macOS. Vorgabe = False (nur eine 64-Bit-ARM-Binärdatei wird erstellt). |
|
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 = Hinweis: Das Festlegen dieser Option auf
true kann möglicherweise beim Debuggen einen Leistungsabfall verursachen. |
|
|
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 = Hinweis: Das Festlegen dieser Option auf
true kann möglicherweise beim Debuggen einen Leistungsabfall verursachen. |
|
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 |
|
|
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 |
|
In der Registrierungseinstellung können Sie den Grenzwert von 60 % wie folgt ändern:
- Schließen Sie die IDE.
- Führen Sie "regedit" aus, und suchen Sie den folgenden Schlüssel: HKEY_CURRENT_USER\Software\Embarcadero\BDS\22.0\Compiling
- Erstellen Sie einen neuen DWORD-Wert mit dem Namen ProcMemAllocLimit, und legen Sie den Wert auf 50 (dezimal) fest.
- Beenden Sie "regedit".
- Starten Sie die IDE.
Siehe auch
- {{Delphi}-Toolkette
- Compilieren, Build erstellen und Anwendungen ausführen
- {{Delphi}-Compiler-Direktive {$U} (Pentium-sichere FDIV-Operationen)
- Erstellen und Bearbeiten von Build-Konfigurationen
- Erstellen, Anwenden, Bearbeiten und Löschen von Optionsgruppen
- Programmierhilfe
- Optionen für Code Insight