Chapter 4. GCC Command Options

When you invoke GCC, it normally does preprocessing, compilation, assembly and linking. The "overall options" allow you to stop this process at an intermediate stage. For example, the -c option says not to run the linker. Then the output consists of object files output by the assembler.

Other options are passed on to one stage of processing. Some options control the preprocessor and others the compiler itself. Yet other options control the assembler and linker; most of these are not documented here, since you rarely need to use any of them.

Most of the command line options that you can use with GCC are useful for C programs; when an option is only useful with another language (usually C++), the explanation says so explicitly. If the description for a particular option does not mention a source language, you can use that option with all supported languages.

Section 4.3 Compiling C++ Programs, for a summary of special options for compiling C++ programs.

The gcc program accepts options and file names as operands. Many options have multi-letter names; therefore multiple single-letter options may not be grouped: -dr is very different from -d -r.

You can mix options and other arguments. For the most part, the order you use doesn't matter. Order does matter when you use several options of the same kind; for example, if you specify -L more than once, the directories are searched in the order specified.

Many options have long names starting with -f or with -W--for example, -fforce-mem, -fstrength-reduce, -Wformat and so on. Most of these have both positive and negative forms; the negative form of -ffoo would be -fno-foo. This manual documents only one of these two forms, whichever one is not the default.

Option Index, for an index to GCC's options.

4.1. Option Summary

Here is a summary of all the options, grouped by type. Explanations are in the following sections.

Overall Options

Refer to Section 4.2 Options Controlling the Kind of Output.

-c  -S  -E  -o file  -pipe  -pass-exit-codes  
-x language  -v  -###  --help  --target-help  --version
C Language Options

Refer to Section 4.4 Options Controlling C Dialect.

-ansi  -std=standard  -aux-info filename 
-fno-asm  -fno-builtin  -fno-builtin-function 
-fhosted  -ffreestanding  -fms-extensions 
-trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp 
-fallow-single-precision  -fcond-mismatch 
-fsigned-bitfields  -fsigned-char 
-funsigned-bitfields  -funsigned-char 
-fwritable-strings
C++ Language Options

Refer to Section 4.5 Options Controlling C++ Dialect.

-fabi-version=n  -fno-access-control  -fcheck-new 
-fconserve-space  -fno-const-strings 
-fno-elide-constructors 
-fno-enforce-eh-specs  -fexternal-templates 
-falt-external-templates 
-ffor-scope  -fno-for-scope  -fno-gnu-keywords 
-fno-implicit-templates 
-fno-implicit-inline-templates 
-fno-implement-inlines  -fms-extensions 
-fno-nonansi-builtins  -fno-operator-names 
-fno-optional-diags  -fpermissive 
-frepo  -fno-rtti  -fstats  -ftemplate-depth-n 
-fuse-cxa-atexit  -fvtable-gc  -fno-weak  -nostdinc++ 
-fno-default-inline  -Wabi  -Wctor-dtor-privacy 
-Wnon-virtual-dtor  -Wreorder 
-Weffc++  -Wno-deprecated 
-Wno-non-template-friend  -Wold-style-cast 
-Woverloaded-virtual  -Wno-pmf-conversions 
-Wsign-promo  -Wsynth
Objective-C Language Options

Refer to Section 4.6 Options Controlling Objective-C Dialect.

-fconstant-string-class=class-name 
-fgnu-runtime  -fnext-runtime  -gen-decls 
-Wno-protocol  -Wselector -Wundeclared-selector
Language Independent Options

Refer to Section 4.7 Options to Control Diagnostic Messages Formatting.

-fmessage-length=n  
-fdiagnostics-show-location=[once|every-line]
Warning Options

Refer to Section 4.8 Options to Request or Suppress Warnings.

-fsyntax-only  -pedantic  -pedantic-errors 
-w  -Wextra  -Wall  -Waggregate-return 
-Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment 
-Wconversion  -Wno-deprecated-declarations 
-Wdisabled-optimization  -Wno-div-by-zero  -Werror 
-Wfloat-equal  -Wformat  -Wformat=2 
-Wformat-nonliteral  -Wformat-security 
-Wimplicit  -Wimplicit-int  
-Wimplicit-function-declaration 
-Werror-implicit-function-declaration 
-Wimport  -Winline  -Winvalid-pch  -Wno-endif-labels 
-Wno-invalid-offsetof 
-Wlarger-than-len  -Wlong-long 
-Wmain  -Wmissing-braces 
-Wmissing-format-attribute  -Wmissing-noreturn 
-Wno-multichar  -Wno-format-extra-args  -Wno-format-y2k 
-Wno-import  -Wnonnull  -Wpacked  -Wpadded 
-Wparentheses  -Wpointer-arith  -Wredundant-decls 
-Wreturn-type  -Wsequence-point  -Wshadow 
-Wsign-compare  -Wstrict-aliasing 
-Wswitch  -Wswitch-default  -Wswitch-enum 
-Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized 
-Wunknown-pragmas  -Wunreachable-code 
-Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter 
-Wunused-value  -Wunused-variable  -Wwrite-strings
C-only Warning Options
-Wbad-function-cast  -Wmissing-declarations 
-Wmissing-prototypes  -Wnested-externs 
-Wstrict-prototypes  -Wtraditional
Debugging Options

Refer to Section 4.9 Options for Debugging Your Program or GCC.

-dletters  -dumpspecs  -dumpmachine  -dumpversion 
-fdump-unnumbered  -fdump-translation-unit[-n] 
-fdump-class-hierarchy[-n] 
-fdump-tree-original[-n]  
-fdump-tree-optimized[-n] 
-fdump-tree-inlined[-n] 
-feliminate-dwarf2-dups -feliminate-unused-debug-types 
-fmem-report -fprofile-arcs 
-frandom-seed=string -fsched-verbose=n 
-ftest-coverage  -ftime-report 
-g  -glevel  -gcoff  -gdwarf  -gdwarf-1  -gdwarf-1+  -gdwarf-2 
-ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ 
-p  -pg  -print-file-name=library  -print-libgcc-file-name 
-print-multi-directory  -print-multi-lib 
-print-prog-name=program  -print-search-dirs  -Q 
-save-temps  -time
Optimization Options

Refer to Section 4.10 Options That Control Optimization.

-falign-functions=n  -falign-jumps=n 
-falign-labels=n  -falign-loops=n  
-fbranch-probabilities  -fcaller-saves  -fcprop-registers 
-fcse-follow-jumps  -fcse-skip-blocks  -fdata-sections 
-fdelayed-branch  -fdelete-null-pointer-checks 
-fexpensive-optimizations  -ffast-math  -ffloat-store 
-fforce-addr  -fforce-mem  -ffunction-sections 
-fgcse  -fgcse-lm  -fgcse-sm  -floop-optimize  -fcrossjumping 
-fif-conversion  -fif-conversion2 
-finline-functions  -finline-limit=n  -fkeep-inline-functions 
-fkeep-static-consts  -fmerge-constants  -fmerge-all-constants 
-fmove-all-movables  -fnew-ra  -fno-branch-count-reg 
-fno-default-inline  -fno-defer-pop 
-fno-function-cse  -fno-guess-branch-probability 
-fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2 
-funsafe-math-optimizations  -ffinite-math-only 
-fno-trapping-math  -fno-zero-initialized-in-bss 
-fomit-frame-pointer  -foptimize-register-move 
-foptimize-sibling-calls  -fprefetch-loop-arrays 
-freduce-all-givs  -fregmove  -frename-registers 
-freorder-blocks  -freorder-functions 
-frerun-cse-after-loop  -frerun-loop-opt 
-fschedule-insns  -fschedule-insns2 
-fno-sched-interblock  -fno-sched-spec  -fsched-spec-load 
-fsched-spec-load-dangerous  -fsched2-use-superblocks 
-fsched2-use-traces  -fsignaling-nans 
-fsingle-precision-constant  -fssa  -fssa-ccp  -fssa-dce 
-fstrength-reduce  -fstrict-aliasing  -ftracer  -fthread-jumps 
-funroll-all-loops  -funroll-loops  -fpeel-loops 
-funswitch-loops  -fold-unroll-loops  -fold-unroll-all-loops 
--param name=value
-O  -O0  -O1  -O2  -O3  -Os
Preprocessor Options

Refer to Section 4.11 Options Controlling the Preprocessor.

-Aquestion=answer 
-A-question[=answer] 
-C  -dD  -dI  -dM  -dN 
-Dmacro[=defn]  -E  -H 
-idirafter dir 
-include file  -imacros file 
-iprefix file  -iwithprefix dir 
-iwithprefixbefore dir  -isystem dir 
-M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  -P  -remap 
-trigraphs  -undef  -Umacro  -Wp,option 
-Xpreprocessor option
Assembler Option

Refer to Section 4.12 Passing Options to the Assembler.

-Wa,option  -Xassembler option
Linker Options

Refer to Section 4.13 Options for Linking.

object-file-name  -llibrary 
-nostartfiles  -nodefaultlibs  -nostdlib -pie 
-s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic 
-Wl,option  -Xlinker option 
-u symbol
Directory Options

Refer to Section 4.14 Options for Directory Search.

-Bprefix  -Idir  -I-  -Ldir  -specs=file
Target Options

Refer to Section 4.16 Specifying Target Machine and Compiler Version.

-V version  -b machine
Machine Dependent Options

Refer to Section 4.17 Hardware Models and Configurations.

SPARC Options

-mcpu=cpu-type 
-mtune=cpu-type 
-mcmodel=code-model 
-m32  -m64 
-mapp-regs  -mbroken-saverestore  -mcypress 
-mfaster-structs  -mflat 
-mfpu  -mhard-float  -mhard-quad-float 
-mimpure-text  -mlive-g0  -mno-app-regs 
-mno-faster-structs  -mno-flat  -mno-fpu 
-mno-impure-text  -mno-stack-bias  -mno-unaligned-doubles 
-msoft-float  -msoft-quad-float  -msparclite  -mstack-bias 
-msupersparc  -munaligned-doubles  -mv8

RS/6000 and PowerPC Options

-mcpu=cpu-type 
-mtune=cpu-type 
-mpower  -mno-power  -mpower2  -mno-power2 
-mpowerpc  -mpowerpc64  -mno-powerpc 
-maltivec  -mno-altivec 
-mpowerpc-gpopt  -mno-powerpc-gpopt 
-mpowerpc-gfxopt  -mno-powerpc-gfxopt 
-mnew-mnemonics  -mold-mnemonics 
-mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc 
-m64  -m32  -mxl-call  -mno-xl-call  -mpe 
-malign-power  -malign-natural 
-msoft-float  -mhard-float  -mmultiple  -mno-multiple 
-mstring  -mno-string  -mupdate  -mno-update 
-mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align 
-mstrict-align  -mno-strict-align  -mrelocatable 
-mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib 
-mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian 
-mdynamic-no-pic 
-mcall-sysv  -mcall-netbsd 
-maix-struct-return  -msvr4-struct-return 
-mabi=altivec  -mabi=no-altivec 
-mabi=spe  -mabi=no-spe 
-misel=yes  -misel=no 
-mspe=yes  -mspe=no 
-mfloat-gprs=yes  -mfloat-gprs=no 
-mprototype  -mno-prototype 
-msim  -mmvme  -mads  -myellowknife  -memb  -msdata 
-msdata=opt  -mvxworks  -mwindiss  -G num  -pthread

i386 and x86-64 Options

-mtune=cpu-type  -march=cpu-type 
-mfpmath=unit 
-masm=dialect  -mno-fancy-math-387 
-mno-fp-ret-in-387  -msoft-float  -msvr3-shlib 
-mno-wide-multiply  -mrtd  -malign-double 
-mpreferred-stack-boundary=num 
-mmmx  -msse  -msse2  -m3dnow 
-mthreads  -mno-align-stringops  -minline-all-stringops 
-mpush-args  -maccumulate-outgoing-args  -m128bit-long-double 
-m96bit-long-double  -mregparm=num  -momit-leaf-frame-pointer 
-mno-red-zone -mno-tls-direct-seg-refs 
-mcmodel=code-model 
-m32  -m64

IA-64 Options

-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic 
-mvolatile-asm-stop  -mb-step  -mregister-names  -mno-sdata 
-mconstant-gp  -mauto-pic  -minline-float-divide-min-latency 
-minline-float-divide-max-throughput 
-minline-int-divide-min-latency 
-minline-int-divide-max-throughput  -mno-dwarf2-asm 
-mfixed-range=register-range

S/390 and zSeries Options

-mtune=cpu-type  -march=cpu-type 
-mhard-float  -msoft-float  -mbackchain  -mno-backchain 
-msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle 
-m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
Code Generation Options

Refer to Section 4.18 Options for Code Generation Conventions.

-fcall-saved-reg  -fcall-used-reg 
-ffixed-reg  -fexceptions 
-fnon-call-exceptions  -funwind-tables 
-fasynchronous-unwind-tables 
-finhibit-size-directive  -finstrument-functions 
-fno-common  -fno-ident  -fno-gnu-linker 
-fpcc-struct-return  -fpic  -fPIC -fpie -fPIE 
-freg-struct-return  -fshared-data  -fshort-enums 
-fshort-double  -fshort-wchar 
-fverbose-asm  -fpack-struct  -fstack-check 
-fstack-limit-register=reg  -fstack-limit-symbol=sym 
-fargument-alias  -fargument-noalias 
-fargument-noalias-global  -fleading-underscore 
-ftls-model=model 
-ftrapv  -fwrapv  -fbounds-check