fbc command-line
Documentation
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 its 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,
produces the executable
produces the executable
The "-x" switch names the executable verbatim, so in Linux, the executable produced from the above command would be called
At its 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.basfoo.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.basfoo.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 usefbc -x foobar.exe -m baz foo.bas bar.bas baz.bas./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) |
| Source code -b < name > Code generationAdd a source file to compilation -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 -lang < name >Select language mode: -forcelang < name >fb, fblite, qb, deprecatedSelect language mode: fb, fblite, qb, deprecated (overrides statements in code)-target < platform > CompilationSet the target platform for cross compilation -gen < backend >Sets the compiler backend (default is 'gas' for x86 and 'gcc' for x86_64) -asm < format >Sets the assembler format for Asm block -arch < type >Set target architecture -O < level >Set the optimization level (-gen gcc) -vec < level >Set level of vector optimizations enabled by the compiler (default: -fpu < type >0)Set the floating point arithmetics unit (default: -fpmode < type >X87)Select between fast and accurate floating-point operations (default: -z < value >PRECISE)Sets miscellaneous or experimental options -picGenerate position-independent code (non-x86 Unix shared libs) -m < name > Define main file (without extension), the entry point (default is the first .bas file on the command line) -entry < name >Override public exported name of implicit user main function -gAdd debug info -profgen < profiler >Enable function profiling by selecting a specific profiler -profileEnable function profiling for gmon/gprof -eAdd error checking -exAdd error checking with RESUME support -exxSame as -eunwind-ex, plus array bounds and dimensions, null-pointer, and error location reportingEnable stack unwind information -Wa < opt >Pass options to GAS (separated by commas) -Wc < opt >Pass options to GCC (separated by commas) -o < name >Set object file path/name (must be passed after the .bas file) -earrayEnable array bounds checking -earraydimsEnable array dimensions checking -eassertEnable assert() and assertwarn() checking -edebugEnable -edebuginfo__FB_DEBUG__Add debug information -elocationEnable full error location reporting -enullptrEnable null-pointer checking | Linking -a < name > BehaviourAdd an object file to linker's list -l < name >Add a library file to linker's list -p < name >Add a path to search for libraries -mtLink with thread-safe runtime library -nodeflibsDo not include the default libraries -nolib < name(s) >Do not include specific library(s) -staticPrefer static libraries over dynamic ones when linking -map < name >Save the linking map to file name -Wl < opt >Pass options to LD (separated by commas) -exportExport symbols for dynamic linkage -libCreate a static library -dylibCreate a DLL, including the import library -dllCreate a DLL, including the import library. (Same as -x < name >-dylib)Set executable/library path/name -nostripDo not strip symbol information from the output file -stripOmit all symbol information from the output file -sysroot < path >Tell the linker where to find libraries (needed by some toolchains) -prefix < path > Target specificSet the compiler prefix path -buildprefix < name >Set the internal buildprefix option -versionShow compiler version on the command line, do not compile or link -vBe verbose -print < option >Display certain information ( -ppfblibdir, host, target, x)Emit the preprocessed input file only, do not compile -rCompile into intermediate file(s) only, do not assemble or link -rrCompile into asm file(s) only, do not assemble or link -cCompile and assemble source file only, do not link -RDo not delete the intermediate file(s) -RRDo not delete the asm file(s) -CDo not delete the object file(s) -w < value >Set min warning level: -maxerr < val >all, none, param, escape, pedantic, next, funcptr, constness, suffix, error, upcast or a valueOnly stop parsing if <val> errors occurred -noerrlineDo not show source line where error occurred -noobjinfoDo not read/write compile-time info from/to .o and .a files -showincludesDisplay a tree of file names of #included files -s < name > MetaSet subsystem ( -t < value >gui, console)Set stack size in kbytes (default: 1 MB or 2 MB) |
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
Note: How to include an icon in a FB executable programapplication.exe)There is a simple command line option to compile a FB program into an executable with an Icon:
- Create a *.rc file, for example appicon.rc, with this info:
- Then when compiling program, add appicon.rc in the list of files to compile.
FB_PROGRAM_ICON ICON "appicon.ico"
(where appicon.ico is the name of icon)
See also