fbc command-line
Using the fbc command-line.
The official FreeBASIC distribution comes with fbc, FreeBASIC's flagship compiler. fbc is a command line compiler, and can be launched from the console - from DOS, the Windows command prompt or a Linux shell. Running fbc from the console without any arguments displays a list of available options, or command-line switches, that can be used to adjust the behavior of the compiler.
At it's simplest, fbc takes a source file as a command-line argument and produces an executable file. It does this by compiling the source file (.bas) into an assembly (.asm) file, then compiling this into an object file (.o) using GAS and finally linking using LD this object file to other object files and libraries it needs to run, producing the final executable file. The assembly and compiled object files are deleted at this point by default. For example, the following command,
`fbc foo.bas`
produces the executable `foo.exe` in DOS and Windows, and `./foo` in Linux. fbc can accept multiple source files at once, compile and link them all into one executable. For example, the following command,
`fbc foo.bas bar.bas baz.bas`
produces the executable `foo.exe` in DOS and Windows, and `./foo` in Linux. Since `foo.bas` was listed first, it will be the main entry point into the executable, and also provide its name. To specify a different entry point or executable name, use the "-m" and "-x" switches, respectively. To have, for example, `baz.bas` provide the main entry point into an executable called `foobar.exe`, you would use
`fbc -x foobar.exe -m baz foo.bas bar.bas baz.bas`
The "-x" switch names the executable verbatim, so in Linux, the executable produced from the above command would be called `./foobar.exe`.
Syntax
`fbc [ options ] [ input_list ]`
Where input_list is a list of filenames. Accepted files are:

File extension | Description
.bas | FreeBASIC source file
.a | Library
.o | Object file
.rc | Resource script (Windows only)
.res | Compiled resource (Windows only)
.xpm | X icon pixmap (Linux only)

Compiling options Source code -b < name > Add a source file to compilation -c
Compile only, do not link
-r
Write asm only, do not compile or link
-o < name >
Set object file path/name (must be passed after the .bas file)
-i < name >
Add a path to search for include files
-include < name >
Include a header file on each source compiled
-d < name=val >
Add a preprocessor's define
-forcelang < name >
Select language compatibility: `fb`, `fblite`, `qb`, `deprecated` (overides statements in code)
-lang < name >
Select language compatibility: `fb`, `fblite`, `qb`, `deprecated`
-entry < name >
Main file without extension, the entry point (default is the first .bas file on the command line)
-m < name >
Main file without extension, the entry point (default is the first .bas file on the command line)
Error checking and Debugging
-w < value >
Set min warning level: `all`, `pedantic`, `next` or a value
-e
Add error checking
-ex
Add error checking with RESUME support
-exx
Same as `-ex` plus array bounds and null-pointer checking
-g
Add debug info
-noerrline
Do not show source line where error occurred
-profile
Enable function profiling
-maxerr < val >
Only stop parsing if <val> errors occurred
Platform specific
-arch < type >
Set target architecture (default: `486`)
-target < platform >
Set the target platform for cross compilation
-fpu < type >
Set the floating point arithmetics unit (default: `FPU`)
-fpmode < type >
Select between fast and accurate floating-point operations (default: `PRECISE`)
-s < name >
Set subsystem (`gui`, `console`)
-t < value >
Set stack size in kbytes (default: 1M)
-vec < level >
Set level of vector optimizations enabled by the compiler (default: `0`)
Miscellaneous
-C
Do not delete the object file(s)
-R
Do not delete the asm file(s)
-v
Be verbose
-version
Show compiler version (note: the compiler will display this info on the command line and quit without compiling or checking other parameters when this parameter is used)
-Wa < opt >
Pass options to GAS (separated by commas)
-prefix < path >
Set the compiler prefix path
-gen < backend >
Sets the compiler backend (default is 'gas').
-z < value >
Sets miscellaneous or experimental options.
-pp
Emit the preprocessed input file only, do not compile
@< file >
Read (additional) command-line options from the file
Linking options
Object code
-a < name >
Add an object file to linker's list
-l < name >
Add a library file to linker's list
-x < name >
Set executable/library path/name
-p < name >
Add a path to search for libraries
-Wl < opt >
Pass options to LD (separated by commas)
Runtime
-lib
Create a static library
-dll
Create a DLL, including the import library. (Same as `-dylib`)
-dylib
Create a DLL, including the import library
-mt
Link with thread-safe runtime library
-nodeflibs
Do not include the default libraries
Miscellaneous
-export
Export symbols for dynamic linkage
-map < name >
Save the linking map to file name

Example
`fbc myfile.bas`
(With DOS version of FBC, compile and link a DOS executable `MYFILE.EXE`.)
`fbc -s gui myfile.bas`
(With Windows version of FBC, compile and link a Windows executable `myfile.exe`. Running the program will not show the console window ("MS-DOS Prompt"))
`fbc -lib module1.bas module2.bas module3.bas -x libmylib.a`
(Compile and link a static library `libmylib.a` from the three source files)
`fbc -m main_module -c main_module.bas`
(Compile an object file `main_module.o` and mark it as an entry point)
`fbc -c sub_module.bas`
(Compile an object file `sub_module.o`)
`fbc -x application.exe main_module.o sub_module.o`
(Link an executable `application.exe`)
See also

- Compiler Options
- Installing FreeBASIC
- Invoking the FreeBASIC compiler