{{fbdoc item="title" value="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 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.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##.

{{fbdoc item="syntax"}}
	##fbc [ //options// ] [ //input_list// ]##
	
	Where //input_list// is a list of filenames. Accepted files are:
	
		{{table columns="2" cellpadding="1" cells="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)"}}

<<{{fbdoc item="section" value="Source code"}}
	=={{fbdoc item="keyword" value="CompilerOptb|-b < name >"}}==
		Add a source file to compilation
	=={{fbdoc item="keyword" value="CompilerOpti|-i < name >"}}==
		Add a path to search for include files
	=={{fbdoc item="keyword" value="CompilerOptinclude|-include < name >"}}==
		Include a header file on each source compiled
	=={{fbdoc item="keyword" value="CompilerOptd|-d < name=val >"}}==
		Add a preprocessor's define
	=={{fbdoc item="keyword" value="CompilerOptlang|-lang < name >"}}==
		Select language mode: ##fb##, ##fblite##, ##qb##, ##deprecated##
	=={{fbdoc item="keyword" value="CompilerOptforcelang|-forcelang < name >"}}==
		Select language mode: ##fb##, ##fblite##, ##qb##, ##deprecated## (overrides statements in code)

{{fbdoc item="section" value="Code generation"}}
	=={{fbdoc item="keyword" value="CompilerOpttarget|-target < platform >"}}==
		Set the target platform for cross compilation
	=={{fbdoc item="keyword" value="CompilerOptgen|-gen < backend >"}}==
		Sets the compiler backend (default is 'gas' for x86 and 'gcc' for x86_64)
	=={{fbdoc item="keyword" value="CompilerOptasm|-asm < format >"}}==
		Sets the assembler format for Asm block
	=={{fbdoc item="keyword" value="CompilerOptarch|-arch < type >"}}==
		Set target architecture (default: ##486##)
	=={{fbdoc item="keyword" value="CompilerOptoptimization|-O < level >"}}==
		Set the optimization level (-gen gcc)
	=={{fbdoc item="keyword" value="CompilerOptvec|-vec < level >"}}==
		Set level of vector optimizations enabled by the compiler (default: ##0##)
	=={{fbdoc item="keyword" value="CompilerOptfpu|-fpu < type >"}}==
		Set the floating point arithmetics unit (default: ##FPU##)
	=={{fbdoc item="keyword" value="CompilerOptfpmode|-fpmode < type >"}}==
		Select between fast and accurate floating-point operations (default: ##PRECISE##)
	=={{fbdoc item="keyword" value="CompilerOptz|-z < value >"}}==
		Sets miscellaneous or experimental options
	=={{fbdoc item="keyword" value="CompilerOptpic|-pic"}}==
		Generate position-independent code (non-x86 Unix shared libs)

{{fbdoc item="section" value="Compilation"}}
	=={{fbdoc item="keyword" value="CompilerOptm|-m < name >"}}==
		Define main file (without extension), the entry point (default is the first .bas file on the command line)
	=={{fbdoc item="keyword" value="CompilerOptentry|-entry < name >"}}==
		Override public exported name of implicit user main function
	=={{fbdoc item="keyword" value="CompilerOptg|-g"}}==
		Add debug info
	=={{fbdoc item="keyword" value="CompilerOptprofile|-profile"}}==
		Enable function profiling
	=={{fbdoc item="keyword" value="CompilerOpte|-e"}}==
		Add error checking
	=={{fbdoc item="keyword" value="CompilerOptex|-ex"}}==
		Add error checking with RESUME support
	=={{fbdoc item="keyword" value="CompilerOptexx|-exx"}}==
		Same as ##-ex##, plus array bounds, null-pointer, and error location reporting
	=={{fbdoc item="keyword" value="CompilerOptWa|-Wa < opt >"}}==
		Pass options to GAS (separated by commas)
	=={{fbdoc item="keyword" value="CompilerOptWc|-Wc < opt >"}}==
		Pass options to GCC (separated by commas)
	=={{fbdoc item="keyword" value="CompilerOpto|-o < name >"}}==
		Set object file path/name (must be passed after the .bas file)

<<>>{{fbdoc item="section" value="Linking"}}
	=={{fbdoc item="keyword" value="CompilerOpta|-a < name >"}}==
		Add an object file to linker's list
	=={{fbdoc item="keyword" value="CompilerOptl|-l < name >"}}==
		Add a library file to linker's list
	=={{fbdoc item="keyword" value="CompilerOptp|-p < name >"}}==
		Add a path to search for libraries
	=={{fbdoc item="keyword" value="CompilerOptmt|-mt"}}==
		Link with thread-safe runtime library
	=={{fbdoc item="keyword" value="CompilerOptnodeflibs|-nodeflibs"}}==
		Do not include the default libraries
	=={{fbdoc item="keyword" value="CompilerOptstatic|-static"}}==
		Prefer static libraries over dynamic ones when linking
	=={{fbdoc item="keyword" value="CompilerOptmap|-map < name >"}}==
		Save the linking map to file name
	=={{fbdoc item="keyword" value="CompilerOptWl|-Wl < opt >"}}==
		Pass options to LD (separated by commas)
	=={{fbdoc item="keyword" value="CompilerOptexport|-export"}}==
		Export symbols for dynamic linkage
	=={{fbdoc item="keyword" value="CompilerOptlib|-lib"}}==
		Create a static library
	=={{fbdoc item="keyword" value="CompilerOptdylib|-dylib"}}==
		Create a DLL, including the import library
	=={{fbdoc item="keyword" value="CompilerOptdll|-dll"}}==
		Create a DLL, including the import library.  (Same as ##-dylib##)
	=={{fbdoc item="keyword" value="CompilerOptx|-x < name >"}}==
		Set executable/library path/name

{{fbdoc item="section" value="Behaviour"}}
	=={{fbdoc item="keyword" value="CompilerOptprefix|-prefix < path >"}}==
		Set the compiler prefix path
	=={{fbdoc item="keyword" value="CompilerOptversion|-version"}}==
		Show compiler version on the command line, do not compile or link
	=={{fbdoc item="keyword" value="CompilerOptv|-v"}}==
		Be verbose
	=={{fbdoc item="keyword" value="CompilerOptprint|-print < option >"}}==
		Display certain information (##fblibdir##, ##host##, ##target##, ##x##)
	=={{fbdoc item="keyword" value="CompilerOptpp|-pp"}}==
		Emit the preprocessed input file only, do not compile
	=={{fbdoc item="keyword" value="CompilerOptr|-r"}}==
		Compile into intermediate file(s) only, do not assemble or link
	=={{fbdoc item="keyword" value="CompilerOptrr|-rr"}}==
		Compile into asm file(s) only, do not assemble or link
	=={{fbdoc item="keyword" value="CompilerOptc|-c"}}==
		Compile and assemble source file only, do not link
	=={{fbdoc item="keyword" value="CompilerOptrupp|-R"}}==
		Do not delete the intermediate file(s)
	=={{fbdoc item="keyword" value="CompilerOptrrupp|-RR"}}==
		Do not delete the asm file(s)
	=={{fbdoc item="keyword" value="CompilerOptcupp|-C"}}==
		Do not delete the object file(s)
	=={{fbdoc item="keyword" value="CompilerOptw|-w < value >"}}==
		Set min warning level: ##all##, ##none##, ##param##, ##escape##, ##pedantic##, ##next##, ##funcptr##, ##constness##, ##suffix## or a value
	=={{fbdoc item="keyword" value="CompilerOptmaxerr|-maxerr < val >"}}==
		Only stop parsing if <val> errors occurred
	=={{fbdoc item="keyword" value="CompilerOptnoerrline|-noerrline"}}==
		Do not show source line where error occurred
	=={{fbdoc item="keyword" value="CompilerOptnoobjinfo|-noobjinfo"}}==
		Do not read/write compile-time info from/to .o and .a files
	=={{fbdoc item="keyword" value="CompilerOptshowincludes|-showincludes"}}==
		Display a tree of file names of #included files

{{fbdoc item="section" value="Target specific"}}
	=={{fbdoc item="keyword" value="CompilerOpts|-s < name >"}}==
		Set subsystem (##gui##, ##console##)
	=={{fbdoc item="keyword" value="CompilerOptt|-t < value >"}}==
		Set stack size in kbytes (default: 1 MB or 2 MB)

{{fbdoc item="section" value="Meta"}}
	=={{fbdoc item="keyword" value="CompilerOptoptfile|@< file >"}}==
		Read (additional) command-line options from a file

>>::c::

{{fbdoc item="ex"}}
	##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##)//
		
	**Note:** How to include an icon in a FB executable program
		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:
					FB_PROGRAM_ICON ICON "appicon.ico"
						(where appicon.ico is the name of icon)
			**""-""** Then when compiling program, add appicon.rc in the list of files to compile.

{{fbdoc item="see"}}
	- [[CatPgCompOpt|Compiler Options]]
	- [[CompilerInstalling|Installing FreeBASIC]]
	- [[CompilerRunning|Invoking the FreeBASIC compiler]]
	- ##[[KeyPgPpcmdline|#cmdline]]##

{{fbdoc item="back" value="DocToc|Table of Contents"}}