Referenz - Der Compiler
Die offizielle FreeBASIC-Ausgabe enthält als Compiler den fbc, FreeBASICs Flagschiff. fbc kann von der Befehlszeile gestartet werden - von DOS, dem Windows-Befehlszeilenprompt oder einer Linux-Shell. IDE-verwöhnte Benutzer können sich eine IDE (z. B. FBEdit, FBIDE, Geany, wxFBE [in alphabetischer Reihenfolge]) selbst installieren, um nicht mit der Befehlszeile hantieren zu müssen. Der Aufruf von fbc von der Konsole ohne Argumente liefert eine Liste der vorhandenen Optionsschalter, die benutzt werden können, um das Verhalten des Compilers genau einzustellen.
Im weiteren Teil dienen Anführungszeichen zur Kennzeichnung der Optionsschalter im Text. Sie sind selbst nicht Bestandteil der Optionsschalter.
Im einfachsten Fall nimmt fbc eine Quelldatei als Befehlszeilen-Argument und erstellt eine ausführbare Datei. Dabei wird die Quelldatei (.bas) in eine Assembler-Datei (.asm) compiliert, die erst per GAS in eine Objekt-Datei (.o) übersetzt wird und dann vom Linker LD mit anderen Objekt-Dateien und Libraries (diese Programmbibliotheken werden im Allgemeinen und im Folgenden unter Linux und Windows "Libraries" genannt), die für den Ablauf erforderlich sind, letztendlich zur ausführbaren Datei gemacht wird. Die Assembler- und compilierten Objekt-Dateien werden dann normalerweise gelöscht. Zum Beispiel erstellt der folgende Befehl:
fbc foo.bas
die ausführbare Datei foo.exe unter DOS/Windows und ./foo unter Linux. fbc übernimmt mehrere Quelldateien auf einmal und compiliert und linkt sie alle in eine ausführbare Datei. Beispielsweise erzeugt der Befehl:
fbc foo.bas bar.bas baz.bas
die ausführbare Datei foo.exe bzw. ./foo. Da foo.bas zuerst in der Liste steht, wird es der Haupteintrittspunkt der Datei sein und auch den Namen dafür liefern. Um einen anderen Eintrittspunkt zu bestimmen, werden die Schalter "-m" und "-x" benutzt. Soll also z. B. baz.bas der Haupteintrittspunkt der Datei foobar.exe sein, würde der Aufruf:
fbc -x foobar.exe -m baz foo.bas bar.bas baz.bas
benutzt werden.
Der Schalter "-x" benennt genau die ausführbare Datei, also würde auch unter linux aus dem obigen Befehl die ausführbare Datei ./foobar.exe erstellt werden.
Syntax:
fbc [ Optionen ] [ Eingabeliste ]
'Eingabeliste' ist eine Liste von Dateinamen. Der Compiler entscheidet abhängig von der Erweiterung, wie eine Datei behandelt werden soll. Akzeptiert werden folgende Dateitypen:
Dateierweiterung | Beschreibung |
---|---|
.bas | FreeBASIC-Quelldatei: die zu compilierende Programmdatei |
.a | Bibliothek (Library): statische Sammlung von vorcompilierten Prozeduren |
.o | Objektdatei: einzelnes vorcompiliertes Modul |
.rc | nur Windows: Ressourcen-Script, Ressourcen-Beschreibung (Dialoge, Menüs, Icons, Tastaturkürzel) |
.res | nur Windows: Compilierte Ressourcendatei |
.xpm | nur Linux:X PixMap (Icon) |
Die folgenden Parameter können an den FreeBASIC-Compiler übergeben werden:
Erzeugung von Bibliotheken mit privaten/öffentlichen Prozeduren
-export [Name] | Exportiert Symbole für dynamisches Linken; siehe EXPORT. Der Name einer SUB/FUNCTION wird explizit für andere Module zugänglich gemacht. Ein anderes Modul kann mit Hilfe der Anweisung DECLARE solche öffentlich deklarierten Prozeduren benutzen. |
-dll, -dylib | Erzeugt eine dynamische Link-Library. So wird unter Windows eine *.dll (inklusive der Import-Library *.dll.a) bzw. unter Linux eine *.so erstellt. |
-lib | Erzeugt eine statische Library. Es wird eine Sammlung von Prozeduren vorcompiliert, die aber nicht wie bei den Optionen "-dll" und "-dylib" einem Programm separat mitgegeben, sondern direkt in das fertige Programm eingefügt wird. Dies nennt man daher statisches Linken. |
[-a] [Name] | Fügt eine vorcompilierte Objekt-Datei (*.o, *.a) zur Linker-Liste hinzu. Das "-a" ist optional, wenn die vorcompilierte Objektdatei die Endung *.o oder *.a besitzt. |
-c | Compiliert nur (erzeugt eine Objektdatei), ohne zu linken. Es werden Sammlungen von Prozeduren vorcompiliert, aber nicht zu einem ausführbaren Programm verbunden. Werden mehrere Dateien gleichzeitig oder hintereinander compiliert, so muss die Hauptdatei mit "-m" markiert werden. |
-C | Behält Objektdateien bei. Während des Compilierens werden Objektdateien mit der Endung *.o erzeugt und am Ende wieder gelöscht. Mit der Option -C werden die Objektdateien nicht gelöscht. Die Option existiert seit FreeBASIC v0.20. |
-l [Name] | Fügt eine Library-Datei zur Linker-Liste hinzu. Eine fertige vorcompilierte statische Sammlung von Prozeduren mit dem Namen lib[Name].a wird statisch dem Programm hinzugefügt. Die ausführbare Programmdatei und das Mitgeben von DLLs (*.dll) oder Shared Librarys (*.so) kann entfallen. |
Behandlung von Programmdateien (*.bas und *.bi)
[-b] [Name] | Fügt eine Quelldatei zur Compilierung hinzu. Das "-b" ist optional. Im Allgemeinen ist diese Option nicht nötig, kann aber benutzt werden, wenn die hinzuzufügende Datei nicht die Namenserweiterung .bas besitzt oder aus einem anderen Verzeichnis stammt. |
-i [Name] | Fügt einen Suchpfad für include-Dateien (*.bi) hinzu. Wird die Option "-i" mehrfach verwendet, bestimmt die Reihenfolge ihres Auftretens die Reihenfolge, in der die Verzeichnisse durchsucht werden. |
-include [Name] | Gibt eine Datei an, die eingebunden wird, bevor die Quelldateien übersetzt werden. Wird die Option "-include" mehrfach verwendet, bestimmt die Reihenfolge ihres Auftretens die Reihenfolge, in der die Dateien eingebunden werden. Die Option bewirkt, dass die mit 'Name' angegebenen Dateien an den Anfang des Hauptmoduls eingefügt werden, als wäre dort eine entsprechende INCLUDE-Anweisung. |
-forcelang [fb|fblite|qb|deprecated] | Stellt die Dialektform ein, in der compiliert werden soll. Die Option überschreibt die Anweisung #LANG bzw. '$LANG im Quelltext. Siehe "-lang" |
-lang [fb|fblite|qb|deprecated] | Stellt die Dialektform ein, in der compiliert werden soll. Um alte GW-BASIC- oder QuickBasic-/QBasic-Quellcodes ohne größere Änderungen zu compilieren, kann auf der Befehlszeile die Option "-lang qb" benutzt werden. Sie bietet eine verbesserte Kompatibilität zu QuickBasic-/QBasic-Code. Um FreeBASIC 0.16 oder noch ältere FreeBASIC-Quellcodes zu compilieren, kann die Option "-lang deprecated" benutzt werden. Sie wurde aus Kompatibilitätsgründen beibehalten, wird aber nicht weiterentwickelt. Wird die Option ausgelassen, so wird "-lang fb" verwendet. Die in der Option eingestellte Dialektform wird von einem im Quelltext verwendeten #LANG überschrieben. Siehe auch "-langforce". |
-[m|entry] [Quelldatei] | Bestimmt den Haupteintrittspunkt einer Quelldatei; das Argument ist der Name einer Quelldatei ohne ihre Erweiterung. Die Datei [Quelldatei] wird als Startdatei angenommen. Sie enthält den Programmstart Main. Wird "-m" bzw. "-entry" nicht verwendet, wird die erste angegebene Datei mit der Namenserweiterung *.bas als Startdatei angesehen. Wird die Option "-c" oder "-r" verwendet, muss "-m" bzw. "-entry" angegeben werden, wenn eine Hauptquelldatei compiliert wird. |
-o [Name] | Setzt den Namen der Ausgabedatei der compilierten Quelldatei oder Objektdatei (.o). "-o" muss unmittelbar nach der Quelldatei stehen, die mit "-b" angegeben wurde. Die Option wirkt allerdings nur zusammen mit der Option "-c", da Objektdateien normalerweise nicht gespeichert werden. Wird "-o" für eine übergebene Datei nicht benutzt, erhält die Ausgabedatei denselben Namen wie die Quelldatei, nur mit der Dateierweiterung *.o Unabhängig vom Namen der Programmdateien mit der Endung *.bas wird ein Programm mit dem Namen ./[Name] bzw. [Name].exe erzeugt. |
Bedingtes Compilieren und Präprozessor
-d [Name=Wert] | Fügt ein Präprozessor-Makro allen Quelldateien hinzu. Die Option bewirkt dasselbe wie die Verwendung der Präprozessordirektiven #DEFINE oder #MACRO. Für bedingtes Compilieren kann man einen Wert definieren, z. B. DEBUG=1, der dann mit #IF oder #IFDEF bzw. #IFNDEF abgefragt werden kann. |
-pp | Nur die vorcompilierte ('preprocessed') Quelldatei ausgegeben; keine komplette Compilierung |
Fehlerbehandlung
-e | Einfache Fehlerunterstützung einschalten. Es werden Funktionen zur Fehlererkennung in das fertige Programm eingefügt, die zum Programmabbruch führen können, wenn ein schwerer Fehler auftritt. |
-ex | Erweiterte Fehlerunterstützung einschalten. Die Option arbeitet wie "-e", aber mit der Möglichkeit, eigene Fehlerbehandlung zu implementieren. Mit Hilfe der Anweisung RESUME kann das Programm auf einen Fehler reagieren und es muss nicht zwangsläufig beendet werden. |
-exx | Wie "-e" und "-ex", aber mit zusätzlicher Prüfung auf gültige Array-Grenzen und korrekte Verwendung von Zeigeradressen (Nullpointer-Prüfung). |
-g | Debugger-Symbole in die Ausgabedateien einfügen, die von GDB-kompatiblen Debuggern verwendet werden können. Informationen zur Fehlersuche werden in das Programm integriert. Aufgrund der zusätzlichen Informationen ist es möglich, zur Laufzeit das Programm Schritt für Schritt auf seine Funktionsweise hin zu überprüfen. Das schrittweise Ausführen von Programmen wird mit Hilfe von Debuggerprogrammen realisiert. FreeBASIC liegt der GNU Debuger gdb bzw. gdb.exe bei. Es gibt aber auch frei erhältliche grafische Oberflächen, die das Debuggen erheblich vereinfachen und die Debug-Information visuell aufbereiten. |
-noerrline | Eine fehlerhafte Stelle im Quellcode nicht anzeigen; nützlich, wenn eine IDE die Fehlermeldungen auswertet. |
Programmerstellung
-arch [Typ] | Setzt den Ziel-CPU-Typ (Standard: 486 falls nicht angegeben) Als 'Typ' kann 386, 486, 586, 686, athlon, athlon-xp, athlon-fx, k8-sse3, pentium-mmx, pentium2, pentium3, pentium4, pentium4-sse3 oder native angegeben werden. |
-asm att|intel | Setzt das verwendete Asm-Format (betrifft nur "-gen gcc") |
-fpu [X87|SSE] | Wird die Option ausgelassen oder "-fpu X87" angegeben, benutzt fbc die normalen 387-Assembleranweisungen für mathematische Operationen. Bei der Option "-fpu SSE" werden SSE2-Assembleranweisungen zur Berechnungen von SINGLE- und DOUBLE-Variablen benutzt. Es wird zuvor geprüft, ob der Prozessor fähig ist, SSE2 Anweisungen auszuführen. Wenn nicht wird die Option ignoriert. Die Option existiert seit FreeBASIC v0.20.) |
-fpmode [FAST | PRECISE] | Gibt die Genauigkeit von Berechnungen mit Nachkommazahlen an. Die Option ist nur in Verbindung mit "-fpu SSE" wirksam. Die Option existiert seit FreeBASIC v0.21.) |
-gen [gas | gcc | llvm] | fbc übersetzt den Quelltext für x86-GAS-Assembler (gas), in C für GNU C (gcc - Die Option existiert seit FreeBASIC v0.21.) oder für die Low Level Virtual Machine (llvm - Die Option existiert seit FreeBASIC v0.90.). |
-r | Nur Assemblerdateien mit der Endung *.asm erzeugen, nicht compilieren. Seit FBC 0.21 und unter Verwendung von "-gen gcc" werden Dateien mit der Endung *.c erstellt. Werden mehrere Dateien gleichzeitig oder hintereinander compiliert, so muss die Hauptdatei mit "-m" markiert werden. Die Option existiert seit FreeBASIC v0.20. |
-R | Während des Compilierens werden Assemblerdateien mit der Endung *.asm erzeugt und am Ende wieder gelöscht. Mit der Option "-R" (Retain=behalten) werden die Assemblerdateien nicht gelöscht und können mit einem Editor eingesehen werden. Dies kann unter anderem dann nützlich sein, wenn man mit der Option "-g" Debug-Informationen erzeugt und sehen will, welche Programmanweisungen der Präprozessor generiert hat. Diese werden in den Assembler-Kommentaren abgelegt. Präprozessor-Makros in diesen Dateien werden ausgewertet. Seit FreeBASIC v0.21 werden unter Verwendung von "-gen gcc" Dateien mit der Endung *.c erstellt. |
-RR | erhalte die endgültige .ASM-Datei Die Option gibt es seit FreeBASIC v0.90.0 |
-s [gui|console] | Nur Windows: Gibt an, ob ein Programm im Fenster oder in der Konsole ausgeführt werden soll. Standardmäßig wird "-s console" benutzt. Wird "-s gui" angegeben, erscheint beim Programmstart kein Konsolenfenster; bei Bedarf muss ein gfx-Grafikfenster initialisiert werden (siehe SCREENRES). |
-t [Wert] | Nur Windows/DOS: Gibt die Größe des verwendeten Stackspeichers in KByte (1024 Byte-Einheiten) an (Standard: 1024 KBytes). Lokale Arrays werden auf dem Stack erzeugt, deshalb ist 1 MB möglicherweise nicht immer genug. Problematisch können auch umfangreiche Programme sein, die reichlich Gebrauch von rekursiven Funktionsaufrufen machen, wie z. B. Raytracer oder Fraktalgeneratoren. |
-target [dos|cygwin] | Nur Windows: Erstellt ausführbare Dateien für andere Systeme. Die bin- und lib-Verzeichnisse müssen die Unterverzeichnisse /dos bzw. /linux der entsprechenden Distribution enthalten. Um die Option einzusetzen, um für andere Betriebssysteme zu compilieren, müssen weitere Voraussetzungen erfüllt sein. |
-titel [ Name ] | Nur XBOX: Setzt den XBE-Anzeigetitel |
-mt | Erzwingt das Linken mit 'Thread-sicherer' Laufzeit-Library für Applikationen mit mehreren Threads. Normalerweise wird automatisch immer die 'Thread-sichere' Version benutzt, wenn die eingebauten FreeBASIC-'threading'-Funktionen verwendet werden. Deshalb kommt diese Option nur bei eigenen 'Thread'-Routinen zum Einsatz. |
-nodeflibs | Keine der Standard-Libraries beim Linken einbinden Bindet Standard-Bibliotheken nicht ein; alle Libraries müssen manuell mit #INCLIB geladen werden, und die Prozeduren darin mit DECLARE deklariert werden. |
-O [ Wert ] | Setzt die Optimierungsebene(Standard ist 0); kann einen der Werte 0, 1, 2, 3 oder max (=3) annehmen |
-p [ Librarypfad ] | Fügt einen Pfad zum Suchen von Libraries hinzu. Standardmäßig werden Libraries im Verzeichnis der FreeBASIC-Systemlibraries und im aktuellen Verzeichnis gesucht. |
-vec [ Wert ] | Setzt die automatische Vektorisierungsebene (Standard ist 0), mögliche Werte sind 0 bzw. NONE, 1 und 2. Die Option ist seit FreeBASIC 0.21 verfügbar.) |
-Wa [ Optionen ] | Übergabe von Optionen an den Assembler GAS( -gen gas oder -gen llvm). Optionen müssen durch Kommata getrennt werden. |
-Wc [ Optionen ] | Übergabe von Optionen an GCC bei Verwendung von "-gen gcc" oder "-gen llvm". Optionen müssen durch Kommata getrennt werden. |
-Wl [ Optionen ] | Übergabe von Optionen an den Linker LD. Optionen müssen durch Kommata getrennt werden. |
-x [Name] | Setzt den Namen der EXE-Datei/Library einschließlich mit Erweiterung. Standardmäßig wird der Name der ersten Quell-Datei verwendet, die auf der Befehlszeile übergeben wurde. Beim Compilieren von Libraries muss die Datei das Präfix "lib" im Namen haben, sonst kann der Linker sie vielleicht nicht finden. Beim getrennten Compilieren und Linken darf diese Option nur vom Linker gesetzt werden. Die Option legt demnach den Namen der Enddatei fest, also den der EXE, LIB oder DLL. |
-z gosub-setjmp | Benutzt setjmp/longjmp zum Implementieren von GOSUB |
Informationen
-v | Aktiviert den ausführlichen Modus; der Compiler gibt dann das Zielsystem und die Architektur aus und zeigt seine Aktionen Schritt für Schritt an. |
-version | Zeigt die Programmversion des verwendeten Compilers an. |
-w [level | all | none | param | escape | pedantic | next | funcptr | constness] | Setzt die Mindest-Warnebene: Es werden nur Warnungen angezeigt, deren Level mindestens "level" entspricht. "-w all" zeigt alle Compiler-Warnungen (Standard), während "-w none" sie versteckt. Weitere Angaben können auch Warnungen anzeigen, die mit "-w all" nicht angezeigt werden: "param": warnt, wenn Parameter in Funktionen weder mit BYVAL noch mit BYREF spezifiziert wurden. "escape": warnt, wenn in einer (nicht mit Ausrufezeichen gekennzeichneten) Zeichenkette Escape-Sequenzen auftauchen. "pedantic": wie "param" und "escape" mit zusätzlicher Längen-Überprüfung bei mit BYVAL übergebenen Parametern und bei Verwendung von CPTR. "next": warnt bei Verwendung eines Identifiers bei NEXT. "funcptr", "constness": noch experimentell; die Bedeutung kann sich in zukünftigen Compiler-Versionen noch ändern. |
-prefix [Pfad] | Setzt das Compiler-Präfix (den Ort, wo der Compiler die bin-, lib- und inc-Verzeichnisse sucht). Standardmäßig ist das der Pfad, in dem sich fbc befindet, falls das bestimmt werden kann. |
-print host|target | Anzeige von Host-|Ziel-Systemname |
-print x | Anzeige von Binär-|Bibliotheks-Dateiname(wenn bekannt) |
-profile | Der Compiler erstellt nach Beendigung die Datei profile.txt, die alle Timing-Ergebnisse für Funktionsaufrufe enthält. Diese Technik nennt man auch Profiling. |
-maxerr [Anzahl|"inf"] | Setzt die Anzahl der Fehler, die der Compiler finden darf, bevor der Vorgang abgebrochen wird. Standard ist 10. Wenn "inf" (unendlich) angegeben wird, macht der Compiler bis zum Ende der Quelldatei weiter. Dies ist nützlich, wenn eine IDE die Fehlermeldungen auswertet. |
-map [Name] | Link-Map als Datei [Name] speichern |
Voreinstellungen aus Dateien einlesen
@Dateiname | Häufig benutzte Compiler-Optionen lassen sich als Textdatei mit dem Namen [Dateiname] abspeichern und können unter Angabe von @Dateiname zum Compilieren benutzt werden. Die Option ist seit FreeBASIC v0.21.0 verfügbar. |
Beispiele:
fbc meinprog.bas
Mit der DOS-Version von fbc: Compilieren und linken einer ausführbaren DOS-Datei MEINPROG.EXE
fbc -s gui meinprog.bas
Mit der Windows-Version von fbc: Compilieren und linken einer ausführbaren Windows-Datei meinprog.exe. Bei diesem Programm wird das Konsolenfenster ("MS-DOS Prompt") nicht angezeigt.
fbc -lib modul1.bas modul2.bas modul.bas -x libmeinelib.a
Compilieren und linken einer statischen Bibliothek libmeinelib.a aus den drei Quelldateien.
fbc -m haupt_modul -c haupt_modul.bas
Compilieren einer Objekt-Datei haupt_modul.o und Markieren als Eintrittspunkt.
fbc -c unter_modul.bas
Compilieren einer Objekt-Datei unter_modul.o
fbc -x anwendung.exe haupt_modul.o unter_modul.o
Linken einer ausführbaren anwendung.exe
Anmerkungen:
Bei Komplett-Downloads (die nicht vom FreeBASIC-Portal angeboten werden), also einem Komplettpaket mit Compiler und IDE, sollte nach der Installation zuerst geprüft werden, ob auch wirklich der aktuelle Compiler enthalten ist (s.o. fbc -version), sonst kann es böse Überraschungen geben, wenn eine veraltete Compiler-Version enthalten sein sollte.
Unterschiede zu QB:
Der FreeBASIC-Compiler erstellt 32-Bit- bzw. 64-Bit-Anwendungen anstelle von 16-Bit-Anwendungen oder nur interpretierten Programmen. Der Compiler ist für mehrere Plattformen verfügbar wie z. B. Linux, DOS und Windows. Auch auf der XBox sind spezielle FreeBASIC-Programme ausführbar. FreeBASIC ist 100% OpenSource und verwendet ausschließlich OpenSource-Software. Siehe auch die englischsprachige Entwicklerseite http://fbc.sf.net.
Der Compiler wird immer noch weiterentwickelt und verbessert.
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|