IDE Window: Compiler Options/de

From Free Pascal wiki

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) русский (ru)

Erstellmodi

Hinzufügen, Löschen und Aktivieren von Erstellmodi

Diese Möglichkeit gibt es nur für Projekte, nicht für Packages.

Erstell Modi erlauben es für ein Projekt verschiedene Compilereinstellungen zu speichern. So können zum Beispiel für die Entwicklung (Debugging) andere Compilereinstellungen verwendet werden als für die endgültige Version. Zwischen diesen Einstellungen können Sie dann in der IDE per Mausklick wechseln.

Anmerkung: If you want to pass some options depending on the platform, for example passing some extra linker options under OS X, please take a look at Build Macros.

The first grid on the top of the page contains the list of build modes with three columns.

The first column shows which mode is currently active. When you activate another mode, all compiler options pages will load the settings of the new mode, including the macro values on the build modes page. There is always only one mode active and you can only edit the properties of one mode at a time. Which mode is active is stored in the session file (lps). The default mode is the first mode.

If your project stores the session in a separate lps file (see Project options / Session / Save session info in), you can store extra modes in the session, so that each developer can have her own set of modes. In this case the second column shows where the mode is stored, in the lpi or the lps (in session). Keep in mind that the first mode is the default mode for the project, so it must be stored in the project, not in the session file.

The last column is the name of the mode. It is an arbitrary string, so you can give it a short name or a whole sentence.

  • The plus button adds a new mode, by duplicating the currently active one and activates it.
  • The minus button delete the currently selected mode. There must be at least one mode. If you delete the first mode, which is the default mode, the second mode automatically becomes the default mode.
  • The up, down buttons allows to reorder the modes.
  • The rightmost button shows the differences between build modes.

Hinweis:: Once you added another build mode there will be a new button in the IDE main bar to quickly switch the currently active mode.

Anmerkung:: Wenn sie ein neues Projekt mit einer alten IDE öffnen, dann sehen sie nur den Vorgabemodus. Wenn sie das Projekt mit der alten IDE speichern, dann gehen alle anderen Modi, alle Makros und conditionals verloren.

Erstellmodi existieren seit Version 0.9.31.

Hinzufügen eines Release- und eines Debugmodus

Die häufigste Aufgabe für Projekte ist das Hinzufügen eines einfachen Release- und Debug-Erstellungsmodus. Denken Sie daran, immer auch einen Debug-Erstellungsmodus zu verwenden, da das Debuggen im Release-Erstellungsmodus nicht funktioniert und dann nur in der endgültigen Version der Anwendung den Release-Erstellungsmodus verwenden.

Der erste Schritt zum Hinzufügen dieser Erstellungsmodi ist das Aufrufen des Projektoptionsdialogs des Projekts. Vergewissern Sie sich dort, dass Sie über zwei Erstellungsmodi verfügen. Ein sogenannten Release- und ein anderes als Debug-Modus. Standardmäßig gibt es dort immer einen Erstellungsmodus. Klicken Sie in diesem Dialogfeld einmal auf die Schaltfläche +, um einen weiteren Modus hinzuzufügen, und benennen Sie die Erstellungsmodi um, indem Sie auf deren Namen doppelklicken. Stellen Sie als Nächstes sicher, dass Sie den Debug-Erstellungsmodus auswählen, damit er dann konfiguriert werden kann.

Build Mode Debug.png

Once we select the debug build mode, all configurations from the project options dialog will be specific to this build mode. The most important configuration to set for this build mode is the Linking options, which should enable GDB debugging, as is the default for Lazarus projects, like in this screenshot:

Build Mode Debug Linking.png

To configure the release build mode we should go back to the Build Modes section and activate the release build mode:

Build Mode Release.png

And for this build mode also go to the linking section and deactivate generating debug info:

Build Mode Release Linking.png

Now just remember to go back to the Build Modes tab and set the debug build mode as the active one while developing the application and only use the release when making releases.

Den aktiven Erstellmodus auswählen

One can select the currently active build mode either in the "Project Options" dialog or in the main IDE Window, in a special button with a drop down which will appear only if the project has more then 1 build mode, as one can see in this screenshot:

Selecting Build Mode Main IDE Windows.png

Projektmakros

The second grid at the bottom of the page shows the project macro values. Anmerkung: Dabei handelt es sich um Lazarus-Makros, nicht um FPC-Makros.

They are simple name, value pairs. Macros can be used in all file names and search paths of the project. Almost all macros have default values so you will only define macros here if you want to override the default. For example a macro macro1 can be used in the Other unit files by inserting the text $(macro1). This macro will then be replaced by the value.

Packages can define macros which can be set (overriden) by the project.

Default value: Setting a macro value to an empty value is not the same as using the default value. To use the default value of a macro, delete the macro from the list.

Delete a macro: A macro can be deleted from the list by changing the name to (none) or empty.

You can set macros depending on other macros on the page Build Macros.

For more details about build macros and conditionals see Macros and Conditionals.

Projektmakros existieren seit Version 0.9.29.

Widget type

In Lazarus 1.0 and later, you use macros to change the widget set of the project. Click on the combo box in the Macro name cell and select LCLWidgetType. The Macro value then shows a combobox where you can select the desired widgetset. If you want to revert to the default widget type, you can delete the two cells again.

The screenshot below shows how to select qt widgetset: BuildModes DebugRelease Widgetqt.png

Pfade

Hier sind die allgemeinen Regeln für die Suchpfade:

  • Relative Pfade werden mit dem Projekt- oder Package-Verzeichnis (wo die .lpi/.lpk Datei ist) erweitert.
  • Diese Pfade werden zu den Suchpfaden hinzugefügt. Sie ersetzen sie nicht.
  • Die IDE hat einen Satz von Suchpfaden für jedes Verzeichnis. Das bedeutet, dass ein Package Suchpfade haben kann, die sich von denen des aktiven Projekts unterscheiden.
  • Wenn ein Package oder Projekt ein Package verwendet, bindet es auch die zugehörigen Suchpfade ein. Sie können die geerbten Suchpfade sehen auf der #Vererbt Seite.
  • Wenn Sie das Lazarus Package-System verwenden, müssen Sie nur höchst selten Suchpfade per Hand eingeben.
  • Der FreePascal Compiler hat eine eigene Konfigurationsdatei (Vorgabe: /etc/fpc.cfg), welche einen Satz von Suchpfaden zu den FPC .ppu - Dateien definiert. Zum Beispiel um die FPC Units der RTL oder FCL wie 'classes', 'sysutils' zu finden. Fügen Sie hier keine Suchpfade zu der Quelltextdateien (.pas, .inc) hinzu.
  • Suchpfade werden durch ein Semikolon ';' getrennt.
  • Führende und nachlaufende Leerzeichen werden von der IDE ignoriert und automatisch entfernt. Die IDE normalisiert die Suchpfade und fügt das Pfadbegrenzungszeichen hinzu (Windows: \, alle anderen: /). Suchpfade werden automatisch für das aktuelle Betriebssystem konvertiert, wenn eine .lpi oder .lpk Datei geöffnet wird.
  • Sie können Makros verwenden. Zum Beispiel $(TargetCPU). Siehe IDE Makros in Pfaden und Dateinamen.
  • Wenn Sie nicht einen Suchpfad verwenden wollen, der von einem benutzten Package geerbt wurde, müssen Sie die Compilereinstellungen des benutzten Packages ändern.
  • Die IDE hat einen Satz von Pfad-Einstellungen pro Verzeichnis:
    • Jedes Verzeichnis im Unit-Suchpfad des Projekts erhält alle Projekt-Suchpfade.
    • Jedes Verzeichnis im Unit-Suchpfad des Packages erhält alle Package-Suchpfade.
    • Andere Verzeichnisse erhalten die Projekt-Suchpfade. Wenn der Projekt-Suchpfad den '.' enthält, sieht das Verzeichnis auch das Projektverzeichnis.
  • Die Verwendung von "uses unitname in 'filename'" wirkt sich nicht auf die anderen Suchpfade aus.

Andere Units (-Fu)

Dies ist der Suchpfad für die Pascal Units (.ppu, .pp, .pas, .p) des Projekts oder Packages. Schauen Sie auf den Fenstertitel, um zu erfahren welches (aktiv ist). Dieser Pfad wird an den FreePascal Compiler übergeben, welcher ihn zu seinem Unit-Pfad hinzufügt.

  • Das Hinzufügen und Entfernen von Units zum Projekt/Package führt zu einer automatischen Nachfrage, ob der Unit-Pfad angepasst werden soll.
  • Dieser Suchpfad enthält die Verzeichnisse ihres Projekts (oder Packages), welche die .pas, .pp oder .p Dateien enthalten.
  • VORSICHT: Fügen Sie keine Verzeichnisse von verwendeten Lazarus-Packages zu diesem Pfad hinzu. Andernfalls wird FPC die .ppu-Dateien des Packages neu erstellen und sie in ihrem Projektverzeichnis ablegen. Dies führt zu mehrfachen .ppu Versionen und Sie werden seltsame 'Can not find unit' Fehler erhalten.

Zum Beispiel: Fügen Sie keine FPC oder LCL Quellverzeichnisse zu diesem Suchpfad hinzu.

  • Wenn Sie einige Units in Ihren Projekten gemeinsam verwenden wollen, sollten Sie ein Package für sie erzeugen. Es ist einfach.

Include-Dateien (-Fi)

Dies ist der Suchpfad für die Include-Dateien (z.B. .inc oder .lrs Dateien). Dieser Pfad wird an den FreePascal Compiler gegeben, welcher ihn zu seinem Include-Pfad hinzufügt, der von den Include-Direktiven wie {$I filename.inc} oder {$INCLUDE filename.inc} verwendet wird.

Bibliotheken (-FI)

Dies ist der Suchpfad für Bibliotheken (.dll oder .so oder .a Dateien).

Unit-Ausgabeverzeichnis (-FU)

Dies ist das Verzeichnis, in dem der Compiler alle Ausgabedateien (Compilerschalter -FU) wie .ppu, .o oder .rst Dateien ablegt. Wenn Sie die $R Direktive für die .lfm Dateien verwenden, werden auch die .lfm Dateien dorthin kopiert.

Ein bekanntes Anwendungsbeispiel ist ein Ausgabeverzeichnis namens units, und dazu ein extra Unterverzeichnis für die Ziel-CPU und das Zielbetriebssystem. Zum Beispiel:

 units/$(TargetCPU)-$(TargetOS)

Anmerkungen:

  • Wenn das Unit-Ausgabeverzeichnis leer ist, wird Lazarus nicht den -FU Schalter an den Compiler übergeben. Der Compiler nimmt dann den -FE Schalter. Siehe Project target file
  • Packages vererben normalerweise ihr Ausgabeverzeichnis an andere Packages via die 'usage' Einstellungen. Sie brauchen keine Package-Pfade manuell zu Ihrem Projekt hinzufügen.

Ziel-Dateiname (-o)

Anmerkung: Dies existiert nur für Projekte, nicht für Packages.

Set here the filename of the generated executable. If the file is relative it will be expanded with the project directory (where the .lpi file is). If no file is given the executable is put into the unit output directory and has the name of the main source file name (usually the .lpr file) without the extension. If no extension is given, the default extension for the platform is added (e.g. .exe for MS Windows, none for others). When a new project was not yet saved and is built the IDE saves the files to the test directory. The relative files are then relative to this directory.

Lazarus passes the compiler switch

  • -o um den Ziel-Dateinamen zu definieren
  • -FE wenn sich der Ziel-Dateiname nicht im Projektverzeichnis (Verzeichnis mit der .lpi Datei) befindet
  • -FU wenn das Unit-Ausgabeverzeichnis nicht leer ist

If the target file name is in another directory (not the directory of the .lpi file), Lazarus will pass the -FE switch to the compiler to make sure that the secondary files, like .o and .rst are put into the same directory. If you cleared the unit output directory then the IDE will not pass the -FU switch and the compiler will generate the .ppu/.o files of the units in the target directory too.

If you cleared the unit output directory and your project target file is in the project directory, then neither -FU nor -FE is passed to the compiler and the compiler will work Delphi compatible and generate the .ppu/.o file of each unit in the same directory as the unit.

Konventionen anwenden

Mit der Aktivierung werden verschiedene Namenskonventionen (abhängig von der Zielplattform) angewendet.

  • Windows: Bei einem Programm wird die .exe-Erweiterung angehängt, bei einer Bibliothek .dll.
  • Unix (z.B. Linux, BSD, Darwin/OS X): Bei einer Bibliothek wird der Name kleingeschrieben und wenn der Name nicht mit 'lib' beginnt, wird lib vorangestellt.
  • Linux, BSD: Wenn es eine Bibliothek ist, wird .so angehängt.
  • Darwin/OS X: Wenn es eine Bibliothek ist, wird .dylib angehängt.

Andere Quellen

Dies ist der Suchpfad für Pascal Unit-Quellen, der nur von der IDE verwendet wird und nicht vom Compiler. Normalerweise lassen Sie dies leer. Er ist nur dann nützlich, wenn Sie die .ppu-Dateien ohne Lazarus erzeugen.

Beispiel: Sie haben ein Verzeichnis mit Quellen und ein Verzeichnis mit den dazugehörigen .ppu Dateien und Sie können oder wollen kein Lazarus-Package erzeugen. Sie fügen das .ppu Verzeichnis zum 'Andere Unitdateien' Pfad hinzu und das .pas Verzeichnis zum 'Andere Quellen' Pfad. Auf diese Weise wird der Compiler die .ppu Dateien verwenden und nicht versuchen, sie jedes Mal neu zu erstellen. Und die IDE wird die Quellen finden und Find Declaration funktioniert.

Zusätzlicher Debuggerpfad

Diese Verzeichnisse werden zum Suchpfad des IDE-Debuggers hinzugefügt, wenn er nach Quelldateien sucht (Units und Include Dateien).

Konfiguration und Ziele

Konfigurationsdateien

Zielplattform

  • Ziel-Betriebssystem
  • Ziel-CPU-Familie
  • Zielprozessor

Parsen

Siehe Free Pascal - Onlinedokumentation

Syntax-Modus

Wählen sie hier den Vorgabemodus. Wenn eine Unit keine {$mode irgendeinmodus} Direktive enthält, wird dies als Vorgabe verwendet.

Siehe Free Pascal - Online documentation

Syntaxeinstellungen

  • C-artige Operatoren (*=, +=, /= und -=)
  • Assertionen verwenden
  • LABEL und GOTO zulassen
  • C++-artige Inlineanweisungen
  • C-artige Makros (global)
  • TP/BP 7.0 kompatibel
  • Name des Konstruktors muss 'init' sein (Destruktor muss 'done' heißen)
  • 'static'-Schlüsselwort in Objekten
  • Ansi-Strings verwenden

Assembler-Stil

  • -R<x> assembler reading style:
  • -Rdefault use default assembler
  • -Ratt read AT&T style assembler
  • -Rintel read Intel style assembler

Kompilieren und Linken

Siehe Free Pascal - Onlinedokumentation

  • Optimierungen
  • Andere Optimierungen
  • Unit-Stil
  • Heap- und Stackgrößen
  • Linken

Debuggen

Siehe Free Pascal - Onlinedokumentation

  • Überprüfungen
  • Info für GDB
  • Andere Debugger-Optionen

Ausführlichkeit

  • Compilerausgaben
  • Abbruch nach Fehlerzahl

Meldungen

Siehe Free Pascal - Onlinedokumentation Note that adding a lot of verbosity slows down the parsing of the compiler out much, sogar wenn die meisten Nachrichten im Nachrichtenfenster verborgen werden.

Andere

Siehe Free Pascal - Onlinedokumentation

  • Bedingungen
  • Benutzerdefinierte Einstellungen

IDE Makros

This page allows to define your project/package specific macros and conditionals. The IDE already provides a lot of macros. You can add your own macros that are valid when the project/package is loaded.

Conditionals allow to set macro values depending on target platform and other macros. For example you can add a linker option when compiling for Mac OS X.

Use the left + button to add a new macro for the project/package. Select a macro and click on the middle + button to add a new possible value. The actual value of a macro is set in the conditionals below, or by the current project on the build modes page (IDE menu / Project / Project Options / Compiler options / Build Modes). To delete a value or a macro, select it and click on the - button.

The conditionals use a scripting language similar to pascal and are edited in the text editor at the bottom of the page. Many short cuts work like in the source editor, including word/identifier completion.

For more details about build macros and conditionals see Macros and Conditionals.

Compileroptions buildmacros1.png

Build macros and conditionals exist since 0.9.29.

IDE Makrowerte

Vererbt

Diese Seite zeigt alle Compilereinstellungen, die von Packages geerbt wurden. Packages erben Optionen über ihre 'usage' Optionen.

The topmost node shows all inherited options, that is the sum of all used packages.

The nodes below show the inherited options of each use package.

Compiler-Kommandos

Makedatei anlegen

Aktivieren sie es, wenn die IDE vor jedem Erstellen ein Makefile und eine Makefile.fpc anlegen soll. Dies wird gegenwärtig nur für Packages unterstützt, nicht für Projekte.

Vorher ausführen

Richten sie hier einen Befehl ein, der vor dem Starten des Compilers ausgeführt wird.

Aufruf an:

  • Kompilieren - ausführen bei normalem Kompilieren (F9).
  • Neu kompilieren - ausführen, wenn alles neu erstellt wird. This could for example a script to clean up.
  • Start - ausführen bei schnellem Kompilieren. Wenn ein Projekt gestartet wird, prüft die IDE, ob eine Neuerstellung notwendig ist. Wenn keine Neuerstellung notwendig ist, überspringt die IDE den Kompilierungsschritt. Setzen sie diese Option, um den Befehl immer auszuführen, sogar wenn der Kompilierungsschritt übersprungen wird.

Die IDE kann den Output des Befehls ndos analysieren und filtern und bei Fehlern stoppen. Aktivieren sie die Einstellungen, welche Meldungen die IDE überwachen soll.

Compiler

Dies ist der Compiler-Pfad, der vom Projekt oder Package verwendet wird. Voreinstellung ist das Makro $(CompPath), das durch den Compiler-Dateinamen in den Umgebungseinstellungen ersetzt wird.

Nachher ausführen

Richten Sie hier einen Befehl ein, der nach dem Starten des Compilers ausgeführt wird. Siehe oben 'Vorher ausführen' für Details.

Eine nützliche Anwendung wäre beispielsweise, sich eine fremdkompilierte (cross-compiled) ausführbare Datei auch immer gleich automatisch vom PC auf die Zielhardware, etwa einen Raspberry, kopieren zu lassen:

scp "$TargetFile()" pi@raspberry:/home/pi/bin

(Das kann tatsächlich sogar ohne Kennworteingabe geschehen, wenn man sich mit "ssh-keygen" ein Schlüsselpaar erzeugt und den öffentlichen Schlüssel dann der Datei authorized_keys des Empfängersystems hinzufügt, indem man "ssh-copy-id [remoteuser@]remotehost" aufruft; Details finden sich z.B. hier)

Diese Einstellungen gelten als Vorgabe für neue Projekte

Kreuzen Sie diese Checkbox an und klicken Sie auf OK. Die Einstellungen werden gespeichert in ~/.lazarus/compileroptions.xml (oder welchen primären Konfigurationspfad Sie auch immer haben). Wenn Sie ein neues Projekt erzeugen, wird diese Datei geladen und initialisiert die Compilereinstellungen. Dieses Merkmal existiert seit Version 0.9.29.

Buttons

Hilfe

Ruft die englische Version dieser Seite auf.

Einstellungen anzeigen

Öffnet einen Dialog, der die aktuellen Kommandozeilenparameter anzeigt.

Test

Dies wird verschiedene Tests starten, um übliche Konfigurationsfehler zu finden. Bei FPC 2.2.0 wird vor einigen doppelten Units gewarnt. Die Warnungen sind korrekt. Aber sie können diese ignorieren, wenn sie die betroffenen Units nicht verwenden.

Laden/Speichern

Öffnet einen Dialog zum speichern/öffnen der aktuellen Compilereinstellungen in/aus einer XML Datei.

OK

Wendet die Änderungen an und beendet den Dialog.

Abbrechen

Macht alle Änderungen rückgängig und beendet den Dialog.