neulab/tldr huggingface dataset:
FRV Options -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 -mhard-float -msoft-float -malloc-cc  -mfixed-cc  -mdword  -mno-dword -mdouble -mno-double -mmedia  -mno-media  -mmuladd  -mno-muladd -mfdpic -minline-plt  -mgprel-ro  -multilib-library-pic -mlinked-fp -mlong-calls  -malign-labels -mlibrary-pic  -macc-4  -macc-8 -mpack -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move -moptimize-membar -mno-optimize-membar -mscc  -mno-scc  -mcond-exec  -mno-cond-exec -mvliw-branch  -mno-vliw-branch -mmulti-cond-exec -mno-multi-cond-exec  -mnested-cond-exec -mno-nested-cond-exec -mtomcat-stats -mTLS  -mtls -mcpu=cpu
GNU/Linux Options -mglibc  -muclibc  -mmusl  -mbionic  -mandroid -tno-android-cc  -tno-android-ld
H8/300 Options -mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32 -malign-300
HPPA Options -march=architecture-type -mcaller-copies -mdisable-fpregs  -mdisable-indexing -mfast-indirect-calls  -mgas -mgnu-ld   -mhp-ld -mfixed-range=register-range -mjump-in-delay -mlinker-opt  -mlong-calls -mlong-load-store  -mno-disable-fpregs -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas -mno-jump-in-delay  -mno-long-load-store -mno-portable-runtime -mno-soft-float -mno-space-regs  -msoft-float  -mpa-risc-1-0 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime -mschedule=cpu-type -mspace-regs  -msio  -mwsio -munix=unix-std  -nolibdld  -static -threads
IA-64 Options -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld -mno-pic -mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata -mconstant-gp  -mauto-pic  -mfused-madd -minline-float-divide-min-latency -minline-float-divide-max-throughput -mno-inline-float-divide -minline-int-divide-min-latency -minline-int-divide-max-throughput -mno-inline-int-divide -minline-sqrt-min-latency -minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bits -mfixed-range=register-range  -mtls-size=tls-size -mtune=cpu-type  -milp32  -mlp64 -msched-br-data-spec -msched-ar-data-spec  -msched-control-spec -msched-br-in-data-spec -msched-ar-in-data-spec  -msched-in-control-spec -msched-spec-ldc -msched-spec-control-ldc -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit  -msched-max-memory-insns=max- insns
LM32 Options -mbarrel-shift-enabled  -mdivide-enabled -mmultiply-enabled -msign-extend-enabled  -muser-enabled
M32R/D Options -m32r2  -m32rx  -m32r -mdebug -malign-loops -mno-align-loops -missue-rate=number -mbranch-cost=number -mmodel=code-size-model-type -msdata=sdata-type -mno-flush-func -mflush-func=name -mno-flush-trap  -mflush-trap=number -G num
M32C Options -mcpu=cpu  -msim  -memregs=number
M680x0 Options -march=arch  -mcpu=cpu  -mtune=tune -m68000  -m68020 -m68020-40  -m68020-60  -m68030  -m68040 -m68060  -mcpu32  -m5200 -m5206e  -m528x  -m5307  -m5407 -mcfv4e  -mbitfield  -mno-bitfield -mc68000  -mc68020 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div -mshort -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel -malign-int  -mstrict-align  -msep-data  -mno-sep-data -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library -mxgot  -mno-xgot  -mlong-jump-table-offsets
MCore Options -mhardlit  -mno-hardlit  -mdiv  -mno-div -mrelax-immediates -mno-relax-immediates  -mwide-bitfields -mno-wide-bitfields -m4byte-functions  -mno-4byte-functions -mcallgraph-data -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes -mno-lsim -mlittle-endian  -mbig-endian  -m210  -m340 -mstack-increment
MeP Options -mabsdiff  -mall-opts  -maverage  -mbased=n  -mbitops -mc=n  -mclip  -mconfig=name  -mcop  -mcop32  -mcop64  -mivc2 -mdc -mdiv  -meb  -mel  -mio-volatile  -ml  -mleadz  -mm  -mminmax -mmult -mno-opts  -mrepeat  -ms  -msatur  -msdram  -msim  -msimnovec  -mtf -mtiny=n
MicroBlaze Options -msoft-float  -mhard-float  -msmall-divides -mcpu=cpu -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift -mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt -mbig-endian -mlittle-endian  -mxl-reorder  -mxl-mode-app-model -mpic-data-is-text-relative
MIPS Options -EL  -EB  -march=arch  -mtune=arch -mips1  -mips2 -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5 -mips32r6 -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6 -mips16 -mno-mips16  -mflip-mips16 -minterlink-compressed -mno-interlink-compressed -minterlink-mips16  -mno-interlink-mips16 -mabi=abi  -mabicalls  -mno-abicalls -mshared  -mno-shared  -mplt -mno-plt  -mxgot  -mno-xgot -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64 -mhard-float  -msoft-float -mno-float  -msingle-float  -mdouble-float -modd-spreg  -mno-odd-spreg -mabs=mode  -mnan=encoding -mdsp -mno-dsp  -mdspr2  -mno-dspr2 -mmcu  -mmno-mcu -meva  -mno-eva -mvirt -mno-virt -mxpa  -mno-xpa -mcrc  -mno-crc -mginv  -mno-ginv -mmicromips  -mno-micromips -mmsa  -mno-msa -mloongson-mmi -mno-loongson-mmi -mloongson-ext  -mno-loongson-ext -mloongson-ext2 -mno-loongson-ext2 -mfpu=fpu-type -msmartmips  -mno-smartmips -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx -mips3d -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc -mlong64  -mlong32 -msym32  -mno-sym32 -Gnum  -mlocal-sdata  -mno-local-sdata -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt -membedded-data -mno-embedded-data -muninit-const-in-rodata -mno-uninit-const-in-rodata -mcode-readable=setting -msplit-addresses -mno-split-addresses -mexplicit-relocs  -mno-explicit-relocs -mcheck-zero-division  -mno-check-zero-division -mdivide-traps -mdivide-breaks -mload-store-pairs  -mno-load-store-pairs -mmemcpy -mno-memcpy  -mlong-calls  -mno-long-calls -mmad  -mno-mad  -mimadd -mno-imadd  -mfused-madd  -mno-fused-madd  -nocpp -mfix-24k -mno-fix-24k -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 -mfix-r5900  -mno-fix-r5900 -mfix-r10000  -mno-fix-r10000 -mfix-rm7000  -mno-fix-rm7000 -mfix-vr4120  -mno-fix-vr4120 -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 -mflush-func=func  -mno-flush-func -mbranch-cost=num  -mbranch-likely -mno-branch-likely -mcompact-branches=policy -mfp-exceptions -mno-fp-exceptions -mvr4130-align  -mno-vr4130-align  -msynci -mno-synci -mlxc1-sxc1  -mno-lxc1-sxc1  -mmadd4  -mno-madd4 -mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address -mframe-header-opt  -mno-frame-header-opt
MMIX Options -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon -mabi=gnu -mabi=mmixware  -mzero-extend  -mknuthdiv -mtoplevel-symbols -melf  -mbranch-predict  -mno-branch-predict -mbase-addresses -mno-base-addresses  -msingle-exit  -mno-single-exit
MN10300 Options -mmult-bug  -mno-mult-bug -mno-am33  -mam33  -mam33-2 -mam34 -mtune=cpu-type -mreturn-pointer-on-d0 -mno-crt0  -mrelax -mliw  -msetlb
Moxie Options -meb  -mel  -mmul.x  -mno-crt0
MSP430 Options -msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall -mrelax -mwarn-mcu -mcode-region=  -mdata-region= -msilicon-errata= -msilicon-errata-warn= -mhwmult=  -minrt  -mtiny-printf -mmax-inline-shift=
NDS32 Options -mbig-endian  -mlittle-endian -mreduced-regs -mfull-regs -mcmov  -mno-cmov -mext-perf  -mno-ext-perf -mext-perf2 -mno-ext-perf2 -mext-string  -mno-ext-string -mv3push  -mno-v3push -m16bit  -mno-16bit -misr-vector-size=num -mcache-block-size=num -march=arch -mcmodel=code-model -mctor-dtor  -mrelax
Nios II Options -G num  -mgpopt=option  -mgpopt  -mno-gpopt -mgprel-sec=regexp  -mr0rel-sec=regexp -mel  -meb -mno-bypass-cache -mbypass-cache -mno-cache-volatile  -mcache-volatile -mno-fast-sw-div -mfast-sw-div -mhw-mul  -mno-hw-mul  -mhw-mulx  -mno-hw-mulx -mno-hw-div  -mhw-div -mcustom-insn=N  -mno-custom-insn -mcustom-fpu-cfg=name -mhal  -msmallc  -msys-crt0=name -msys-lib=name -march=arch  -mbmx  -mno-bmx  -mcdx  -mno-cdx
Nvidia PTX Options -m64  -mmainkernel  -moptimize
OpenRISC Options -mboard=name  -mnewlib  -mhard-mul  -mhard-div -msoft-mul  -msoft-div -msoft-float  -mhard-float  -mdouble-float -munordered-float -mcmov  -mror  -mrori  -msext  -msfimm  -mshftimm
PDP-11 Options -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 -mint32  -mno-int16  -mint16  -mno-int32 -msplit  -munix-asm -mdec-asm  -mgnu-asm  -mlra
picoChip Options -mae=ae_type  -mvliw-lookahead=N -msymbol-as-address -mno-inefficient-warnings
PowerPC Options See RS/6000 and PowerPC Options.
PRU Options -mmcu=mcu  -minrt  -mno-relax  -mloop -mabi=variant
RISC-V Options -mbranch-cost=N-instruction -mplt  -mno-plt -mabi=ABI- string -mfdiv  -mno-fdiv -mdiv  -mno-div -march=ISA-string -mtune=processor-string -mpreferred-stack-boundary=num -msmall-data-limit=N-bytes -msave-restore  -mno-save-restore -mshorten-memrefs  -mno-shorten-memrefs -mstrict-align -mno-strict-align -mcmodel=medlow  -mcmodel=medany -mexplicit-relocs -mno-explicit-relocs -mrelax  -mno-relax -mriscv-attribute -mmo-riscv-attribute -malign-data=type -mbig-endian  -mlittle-endian +-mstack-protector-guard=guard -mstack-protector-guard-reg=reg +-mstack-protector-guard-offset=offset
RL78 Options -msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs -mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14 -m64bit-doubles -m32bit-doubles  -msave-mduc-in-interrupts
RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model -mpowerpc64 -maltivec  -mno-altivec -mpowerpc-gpopt  -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd  -mno-popcntd -mfprnd  -mno-fprnd -mcmpb  -mno-cmpb -mhard-dfp  -mno-hard-dfp -mfull-toc   -mminimal-toc  -mno-fp-in-toc -mno-sum-in-toc -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe -malign-power  -malign-natural -msoft-float  -mhard-float  -mmultiple -mno-multiple -mupdate  -mno-update -mavoid-indexed-addresses -mno-avoid-indexed-addresses -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  -mswdiv  -msingle-pic-base -mprioritize-restricted-insns=priority -msched-costly-dep=dependence_type -minsert-sched-nops=scheme -mcall-aixdesc  -mcall-eabi  -mcall-freebsd -mcall-linux -mcall-netbsd  -mcall-openbsd -mcall-sysv  -mcall-sysv-eabi -mcall-sysv-noeabi -mtraceback=traceback_type -maix-struct-return -msvr4-struct-return -mabi=abi-type  -msecure-plt  -mbss-plt -mlongcall  -mno-longcall  -mpltseq  -mno-pltseq -mblock-move-inline-limit=num -mblock-compare-inline-limit=num -mblock-compare-inline-loop-limit=num -mno-block-ops-unaligned-vsx -mstring-compare-inline-limit=num -misel  -mno-isel -mvrsave -mno-vrsave -mmulhw  -mno-mulhw -mdlmzb  -mno-dlmzb -mprototype -mno-prototype -msim  -mmvme  -mads  -myellowknife  -memb  -msdata -msdata=opt  -mreadonly-in-sdata  -mvxworks  -G num -mrecip -mrecip=opt  -mno-recip  -mrecip-precision -mno-recip-precision -mveclibabi=type  -mfriz  -mno-friz -mpointers-to-nested-functions -mno-pointers-to-nested-functions -msave-toc-indirect -mno-save-toc-indirect -mpower8-fusion  -mno-mpower8-fusion -mpower8-vector  -mno-power8-vector -mcrypto  -mno-crypto  -mhtm -mno-htm -mquad-memory  -mno-quad-memory -mquad-memory-atomic -mno-quad-memory-atomic -mcompat-align-parm  -mno-compat-align-parm -mfloat128  -mno-float128  -mfloat128-hardware -mno-float128-hardware -mgnu-attribute  -mno-gnu-attribute -mstack-protector-guard=guard -mstack-protector-guard-reg=reg -mstack-protector-guard-offset=offset -mprefixed -mno-prefixed -mpcrel -mno-pcrel -mmma -mno-mmma
RX Options -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu -mcpu= -mbig-endian-data  -mlittle-endian-data -msmall-data -msim  -mno-sim -mas100-syntax  -mno-as100-syntax -mrelax -mmax-constant-size= -mint-register= -mpid -mallow-string-insns  -mno-allow-string-insns -mjsr -mno-warn-multiple-fast-interrupts -msave-acc-in-interrupts
S/390 and zSeries Options -mtune=cpu-type  -march=cpu-type -mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp -mlong-double-64  -mlong-double-128 -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack -msmall-exec  -mno-small-exec -mmvcle  -mno-mvcle -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch -mhtm  -mvx  -mzvector -mtpf-trace  -mno-tpf-trace  -mtpf-trace-skip -mno-tpf-trace-skip -mfused-madd  -mno-fused-madd -mwarn-framesize -mwarn-dynamicstack  -mstack-size  -mstack-guard -mhotpatch=halfwords,halfwords
Score Options -meb  -mel -mnhwloop -muls -mmac -mscore5  -mscore5u -mscore7  -mscore7d
SH Options -m1  -m2  -m2e -m2a-nofpu  -m2a-single-only  -m2a-single -m2a -m3  -m3e -m4-nofpu  -m4-single-only  -m4-single  -m4 -m4a-nofpu -m4a-single-only  -m4a-single  -m4a  -m4al -mb  -ml  -mdalign -mrelax -mbigtable  -mfmovd  -mrenesas  -mno-renesas  -mnomacsave -mieee  -mno-ieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct -mprefergot  -musermode  -multcost=number  -mdiv=strategy -mdivsi3_libfunc=name  -mfixed-range=register-range -maccumulate-outgoing-args -matomic-model=atomic-model -mbranch-cost=num  -mzdcbranch  -mno-zdcbranch -mcbranch-force-delay-slot -mfused-madd  -mno-fused-madd  -mfsca -mno-fsca  -mfsrra  -mno-fsrra -mpretend-cmove  -mtas
Solaris 2 Options -mclear-hwcap  -mno-clear-hwcap  -mimpure-text -mno-impure-text -pthreads
SPARC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model -mmemory-model=mem-model -m32  -m64  -mapp-regs  -mno-app-regs -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat -mfpu -mno-fpu  -mhard-float  -msoft-float -mhard-quad-float -msoft-quad-float -mstack-bias  -mno-stack-bias -mstd-struct-return -mno-std-struct-return -munaligned-doubles  -mno-unaligned-doubles -muser-mode  -mno-user-mode -mv8plus  -mno-v8plus  -mvis  -mno-vis -mvis2  -mno-vis2  -mvis3  -mno-vis3 -mvis4  -mno-vis4  -mvis4b -mno-vis4b -mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld -mno-fsmuld -mpopc  -mno-popc  -msubxc  -mno-subxc -mfix-at697f -mfix-ut699  -mfix-ut700  -mfix-gr712rc -mlra  -mno-lra
System V Options -Qy  -Qn  -YP,paths  -Ym,dir
TILE-Gx Options -mcpu=CPU  -m32  -m64  -mbig-endian  -mlittle-endian -mcmodel=code-model
TILEPro Options -mcpu=cpu  -m32
V850 Options -mlong-calls  -mno-long-calls  -mep  -mno-ep -mprolog-function  -mno-prolog-function  -mspace -mtda=n  -msda=n -mzda=n -mapp-regs  -mno-app-regs -mdisable-callt  -mno-disable-callt -mv850e2v3  -mv850e2  -mv850e1  -mv850es -mv850e  -mv850  -mv850e3v5 -mloop -mrelax -mlong-jumps -msoft-float -mhard-float -mgcc-abi -mrh850-abi -mbig-switch
VAX Options -mg  -mgnu  -munix
Visium Options -mdebug  -msim  -mfpu  -mno-fpu  -mhard-float -msoft-float -mcpu=cpu-type  -mtune=cpu-type  -msv-mode  -muser-mode
VMS Options -mvms-return-codes  -mdebug-main=prefix  -mmalloc64 -mpointer-size=size
VxWorks Options -mrtp  -non-static  -Bstatic  -Bdynamic -Xbind-lazy -Xbind-now
x86 Options -mtune=cpu-type  -march=cpu-type -mtune-ctrl=feature-list -mdump-tune-features  -mno-default -mfpmath=unit -masm=dialect -mno-fancy-math-387 -mno-fp-ret-in-387  -m80387  -mhard-float -msoft-float -mno-wide-multiply  -mrtd  -malign-double -mpreferred-stack-boundary=num -mincoming-stack-boundary=num -mcld -mcx16  -msahf  -mmovbe  -mcrc32 -mrecip  -mrecip=opt -mvzeroupper -mprefer-avx128  -mprefer-vector-width=opt -mmmx  -msse  -msse2 -msse3  -mssse3  -msse4.1  -msse4.2  -msse4  -mavx -mavx2  -mavx512f -mavx512pf  -mavx512er  -mavx512cd  -mavx512vl -mavx512bw  -mavx512dq -mavx512ifma  -mavx512vbmi  -msha  -maes -mpclmul  -mfsgsbase -mrdrnd  -mf16c  -mfma  -mpconfig  -mwbnoinvd -mptwrite -mprefetchwt1  -mclflushopt  -mclwb  -mxsavec  -mxsaves -msse4a -m3dnow  -m3dnowa  -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4  -mxop -madx -mlzcnt  -mbmi2  -mfxsr  -mxsave  -mxsaveopt  -mrtm  -mhle  -mlwp -mmwaitx  -mclzero  -mpku  -mthreads  -mgfni  -mvaes  -mwaitpkg -mshstk -mmanual-endbr -mforce-indirect-call  -mavx512vbmi2 -mavx512bf16 -menqcmd -mvpclmulqdq  -mavx512bitalg  -mmovdiri -mmovdir64b  -mavx512vpopcntdq -mavx5124fmaps  -mavx512vnni -mavx5124vnniw  -mprfchw  -mrdpid -mrdseed  -msgx -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile  -mamx-int8 -mamx-bf16 -muintr -mhreset -mavxvnni -mcldemote  -mms-bitfields -mno-align-stringops  -minline-all-stringops -minline-stringops-dynamically  -mstringop-strategy=alg -mkl -mwidekl -mmemcpy-strategy=strategy  -mmemset-strategy=strategy -mpush-args -maccumulate-outgoing-args  -m128bit-long-double -m96bit-long-double -mlong-double-64  -mlong-double-80  -mlong-double-128 -mregparm=num -msseregparm -mveclibabi=type  -mvect8-ret-in-mem -mpc32  -mpc64 -mpc80  -mstackrealign -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs -mcmodel=code-model  -mabi=name -maddress-mode=mode -m32  -m64  -mx32  -m16  -miamcu -mlarge-data-threshold=num -msse2avx  -mfentry  -mrecord-mcount -mnop-mcount  -m8bit-idiv -minstrument-return=type -mfentry-name=name -mfentry-section=name -mavx256-split-unaligned-load -mavx256-split-unaligned-store -malign-data=type -mstack-protector-guard=guard -mstack-protector-guard-reg=reg -mstack-protector-guard-offset=offset -mstack-protector-guard-symbol=symbol -mgeneral-regs-only -mcall-ms2sysv-xlogues -mindirect-branch=choice -mfunction-return=choice -mindirect-branch-register -mneeded
x86 Windows Options -mconsole  -mcygwin  -mno-cygwin  -mdll -mnop-fun-dllimport  -mthread -municode  -mwin32  -mwindows -fno-set-stack-executable
Xstormy16 Options -msim
Xtensa Options -mconst16  -mno-const16 -mfused-madd  -mno-fused-madd -mforce-no-pic -mserialize-volatile  -mno-serialize-volatile -mtext-section-literals  -mno-text-section-literals -mauto-litpools -mno-auto-litpools -mtarget-align  -mno-target-align -mlongcalls -mno-longcalls -mabi=abi-type
zSeries Options See S/390 and zSeries Options.
Options Controlling the Kind of Output Compilation can involve up to four stages: preprocessing, compilation proper, assembly and linking, always in that order.  GCC is capable of preprocessing and compiling several files either into several assembler input files, or into one assembler input file; then each assembler input file produces an object file, and linking combines all the object files (those newly compiled, and those specified as input) into an executable file.
For any given input file, the file name suffix determines what kind of compilation is done:
file.c C source code that must be preprocessed.
file.i C source code that should not be preprocessed.
file.ii C++ source code that should not be preprocessed.
file.m Objective-C source code.  Note that you must link with the libobjc library to make an Objective-C program work.
file.mi Objective-C source code that should not be preprocessed.
file.mm file.M Objective-C++ source code.  Note that you must link with the libobjc library to make an Objective-C++ program work.  Note that .M refers to a literal capital M.
file.mii Objective-C++ source code that should not be preprocessed.
file.h C, C++, Objective-C or Objective-C++ header file to be turned into a precompiled header (default), or C, C++ header file to be turned into an Ada spec (via the -fdump-ada-spec switch).
file.cc file.cp file.cxx file.cpp file.CPP file.c++ file.C C++ source code that must be preprocessed.  Note that in .cxx, the last two letters must both be literally x.  Likewise, .C refers to a literal capital C.
file.mm file.M Objective-C++ source code that must be preprocessed.
file.hh file.H file.hp file.hxx file.hpp file.HPP file.h++ file.tcc C++ header file to be turned into a precompiled header or Ada spec.
file.f file.for file.ftn Fixed form Fortran source code that should not be preprocessed.
file.F file.FOR file.fpp file.FPP file.FTN Fixed form Fortran source code that must be preprocessed (with the traditional preprocessor).
file.f90 file.f95 file.f03 file.f08 Free form Fortran source code that should not be preprocessed.
file.F90 file.F95 file.F03 file.F08 Free form Fortran source code that must be preprocessed (with the traditional preprocessor).
file.go Go source code.
file.brig BRIG files (binary representation of HSAIL).
file.d D source code.
file.di D interface file.
file.dd D documentation code (Ddoc).
file.ads Ada source code file that contains a library unit declaration (a declaration of a package, subprogram, or generic, or a generic instantiation), or a library unit renaming declaration (a package, generic, or subprogram renaming declaration).  Such files are also called specs.
file.adb Ada source code file containing a library unit body (a subprogram or package body).  Such files are also called bodies.
file.s Assembler code.
file.S file.sx Assembler code that must be preprocessed.
other An object file to be fed straight into linking.  Any file name with no recognized suffix is treated this way.
You can specify the input language explicitly with the -x option:
-x language Specify explicitly the language for the following input files (rather than letting the compiler choose a default based on the file name suffix).  This option applies to all following input files until the next -x option.  Possible values for language are:
c  c-header  cpp-output c++  c++-header  c++-system-header c++-user-header c++-cpp-output objective-c  objective-c-header  objective-c-cpp-output objective-c++ objective-c++-header objective-c++-cpp-output assembler  assembler-with-cpp ada d f77  f77-cpp-input f95  f95-cpp-input go brig
-x none Turn off any specification of a language, so that subsequent files are handled according to their file name suffixes (as they are if -x has not been used at all).
If you only want some of the stages of compilation, you can use -x (or filename suffixes) to tell gcc where to start, and one of the options -c, -S, or -E to say where gcc is to stop.  Note that some combinations (for example, -x cpp-output -E) instruct gcc to do nothing at all.
-c  Compile or assemble the source files, but do not link.  The linking stage simply is not done.  The ultimate output is in the form of an object file for each source file.
By default, the object file name for a source file is made by replacing the suffix .c, .i, .s, etc., with .o.
Unrecognized input files, not requiring compilation or assembly, are ignored.
-S  Stop after the stage of compilation proper; do not assemble.  The output is in the form of an assembler code file for each non- assembler input file specified.
By default, the assembler file name for a source file is made by replacing the suffix .c, .i, etc., with .s.
Input files that don't require compilation are ignored.
-E  Stop after the preprocessing stage; do not run the compiler proper. The output is in the form of preprocessed source code, which is sent to the standard output.
Input files that don't require preprocessing are ignored.
-o file Place the primary output in file file.  This applies to whatever sort of output is being produced, whether it be an executable file, an object file, an assembler file or preprocessed C code.
If -o is not specified, the default is to put an executable file in a.out, the object file for source.suffix in source.o, its assembler file in source.s, a precompiled header file in source.suffix.gch, and all preprocessed C source on standard output.
Though -o names only the primary output, it also affects the naming of auxiliary and dump outputs.  See the examples below.  Unless overridden, both auxiliary outputs and dump outputs are placed in the same directory as the primary output.  In auxiliary outputs, the suffix of the input file is replaced with that of the auxiliary output file type; in dump outputs, the suffix of the dump file is appended to the input file suffix.  In compilation commands, the base name of both auxiliary and dump outputs is that of the primary output; in compile and link commands, the primary output name, minus the executable suffix, is combined with the input file name.  If both share the same base name, disregarding the suffix, the result of the combination is that base name, otherwise, they are concatenated, separated by a dash.
gcc -c foo.c ...
will use foo.o as the primary output, and place aux outputs and dumps next to it, e.g., aux file foo.dwo for -gsplit-dwarf, and dump file foo.c.???r.final for -fdump-rtl-final.
If a non-linker output file is explicitly specified, aux and dump files by default take the same base name:
gcc -c foo.c -o dir/foobar.o ...
will name aux outputs dir/foobar.* and dump outputs dir/foobar.c.*.
A linker output will instead prefix aux and dump outputs:
gcc foo.c bar.c -o dir/foobar ...
will generally name aux outputs dir/foobar-foo.* and dir/foobar-bar.*, and dump outputs dir/foobar-foo.c.* and dir/foobar-bar.c.*.
The one exception to the above is when the executable shares the base name with the single input:
gcc foo.c -o dir/foo ...
in which case aux outputs are named dir/foo.* and dump outputs named dir/foo.c.*.
The location and the names of auxiliary and dump outputs can be adjusted by the options -dumpbase, -dumpbase-ext, -dumpdir, -save-temps=cwd, and -save-temps=obj.
-dumpbase dumpbase This option sets the base name for auxiliary and dump output files. It does not affect the name of the primary output file.  Intermediate outputs, when preserved, are not regarded as primary outputs, but as auxiliary outputs:
gcc -save-temps -S foo.c
saves the (no longer) temporary preprocessed file in foo.i, and then compiles to the (implied) output file foo.s, whereas:
gcc -save-temps -dumpbase save-foo -c foo.c
preprocesses to in save-foo.i, compiles to save-foo.s (now an intermediate, thus auxiliary output), and then assembles to the (implied) output file foo.o.
Absent this option, dump and aux files take their names from the input file, or from the (non-linker) output file, if one is explicitly specified: dump output files (e.g. those requested by -fdump-* options) with the input name suffix, and aux output files (those requested by other non-dump options, e.g. "-save-temps", "-gsplit-dwarf", "-fcallgraph-info") without it.
Similar suffix differentiation of dump and aux outputs can be attained for explicitly-given -dumpbase basename.suf by also specifying -dumpbase-ext .suf.
If dumpbase is explicitly specified with any directory component, any dumppfx specification (e.g. -dumpdir or -save-temps=*) is ignored, and instead of appending to it, dumpbase fully overrides it:
gcc foo.c -c -o dir/foo.o -dumpbase alt/foo \ -dumpdir pfx- -save-temps=cwd ...
creates auxiliary and dump outputs named alt/foo.*, disregarding dir/ in -o, the ./ prefix implied by -save-temps=cwd, and pfx- in -dumpdir.
When -dumpbase is specified in a command that compiles multiple inputs, or that compiles and then links, it may be combined with dumppfx, as specified under -dumpdir.  Then, each input file is compiled using the combined dumppfx, and default values for dumpbase and auxdropsuf are computed for each input file:
gcc foo.c bar.c -c -dumpbase main ...
creates foo.o and bar.o as primary outputs, and avoids overwriting the auxiliary and dump outputs by using the dumpbase as a prefix, creating auxiliary and dump outputs named main-foo.*  and main-bar.*.
An empty string specified as dumpbase avoids the influence of the output basename in the naming of auxiliary and dump outputs during compilation, computing default values :
gcc -c foo.c -o dir/foobar.o -dumpbase " ...
will name aux outputs dir/foo.* and dump outputs dir/foo.c.*.  Note how their basenames are taken from the input name, but the directory still defaults to that of the output.
The empty-string dumpbase does not prevent the use of the output basename for outputs during linking:
gcc foo.c bar.c -o dir/foobar -dumpbase " -flto ...
The compilation of the source files will name auxiliary outputs dir/foo.* and dir/bar.*, and dump outputs dir/foo.c.* and dir/bar.c.*.  LTO recompilation during linking will use dir/foobar. as the prefix for dumps and auxiliary files.
-dumpbase-ext auxdropsuf When forming the name of an auxiliary (but not a dump) output file, drop trailing auxdropsuf from dumpbase before appending any suffixes. If not specified, this option defaults to the suffix of a default dumpbase, i.e., the suffix of the input file when -dumpbase is not present in the command line, or dumpbase is combined with dumppfx.
gcc foo.c -c -o dir/foo.o -dumpbase x-foo.c -dumpbase-ext .c ...
creates dir/foo.o as the main output, and generates auxiliary outputs in dir/x-foo.*, taking the location of the primary output, and dropping the .c suffix from the dumpbase.  Dump outputs retain the suffix: dir/x-foo.c.*.
This option is disregarded if it does not match the suffix of a specified dumpbase, except as an alternative to the executable suffix when appending the linker output base name to dumppfx, as specified below:
gcc foo.c bar.c -o main.out -dumpbase-ext .out ...
creates main.out as the primary output, and avoids overwriting the auxiliary and dump outputs by using the executable name minus auxdropsuf as a prefix, creating auxiliary outputs named main-foo.* and main-bar.* and dump outputs named main-foo.c.* and main-bar.c.*.
-dumpdir dumppfx When forming the name of an auxiliary or dump output file, use dumppfx as a prefix:
gcc -dumpdir pfx- -c foo.c ...
creates foo.o as the primary output, and auxiliary outputs named pfx-foo.*, combining the given dumppfx with the default dumpbase derived from the default primary output, derived in turn from the input name.  Dump outputs also take the input name suffix: pfx-foo.c.*.
If dumppfx is to be used as a directory name, it must end with a directory separator:
gcc -dumpdir dir/ -c foo.c -o obj/bar.o ...
creates obj/bar.o as the primary output, and auxiliary outputs named dir/bar.*, combining the given dumppfx with the default dumpbase derived from the primary output name.  Dump outputs also take the input name suffix: dir/bar.c.*.
It defaults to the location of the output file; options -save-temps=cwd and -save-temps=obj override this default, just like an explicit -dumpdir option.  In case multiple such options are given, the last one prevails:
gcc -dumpdir pfx- -c foo.c -save-temps=obj ...
outputs foo.o, with auxiliary outputs named foo.* because -save-temps=* overrides the dumppfx given by the earlier -dumpdir option.  It does not matter that =obj is the default for -save-temps, nor that the output directory is implicitly the current directory. Dump outputs are named foo.c.*.
When compiling from multiple input files, if -dumpbase is specified, dumpbase, minus a auxdropsuf suffix, and a dash are appended to (or override, if containing any directory components) an explicit or defaulted dumppfx, so that each of the multiple compilations gets differently-named aux and dump outputs.
gcc foo.c bar.c -c -dumpdir dir/pfx- -dumpbase main ...
outputs auxiliary dumps to dir/pfx-main-foo.* and dir/pfx-main-bar.*, appending dumpbase- to dumppfx.  Dump outputs retain the input file suffix: dir/pfx-main-foo.c.*  and dir/pfx-main-bar.c.*, respectively. Contrast with the single-input compilation:
gcc foo.c -c -dumpdir dir/pfx- -dumpbase main ...
that, applying -dumpbase to a single source, does not compute and append a separate dumpbase per input file.  Its auxiliary and dump outputs go in dir/pfx-main.*.
When compiling and then linking from multiple input files, a defaulted or explicitly specified dumppfx also undergoes the dumpbase- transformation above (e.g. the compilation of foo.c and bar.c above, but without -c).  If neither -dumpdir nor -dumpbase are given, the linker output base name, minus auxdropsuf, if specified, or the executable suffix otherwise, plus a dash is appended to the default dumppfx instead.  Note, however, that unlike earlier cases of linking:
gcc foo.c bar.c -dumpdir dir/pfx- -o main ...
does not append the output name main to dumppfx, because -dumpdir is explicitly specified.  The goal is that the explicitly-specified dumppfx may contain the specified output name as part of the prefix, if desired; only an explicitly-specified -dumpbase would be combined with it, in order to avoid simply discarding a meaningful option.
When compiling and then linking from a single input file, the linker output base name will only be appended to the default dumppfx as above if it does not share the base name with the single input file name.  This has been covered in single-input linking cases above, but not with an explicit -dumpdir that inhibits the combination, even if overridden by -save-temps=*:
gcc foo.c -dumpdir alt/pfx- -o dir/main.exe -save-temps=cwd ...
Auxiliary outputs are named foo.*, and dump outputs foo.c.*, in the current working directory as ultimately requested by -save-temps=cwd.
Summing it all up for an intuitive though slightly imprecise data flow: the primary output name is broken into a directory part and a basename part; dumppfx is set to the former, unless overridden by -dumpdir or -save-temps=*, and dumpbase is set to the latter, unless overriden by -dumpbase.  If there are multiple inputs or linking, this dumpbase may be combined with dumppfx and taken from each input file.  Auxiliary output names for each input are formed by combining dumppfx, dumpbase minus suffix, and the auxiliary output suffix; dump output names are only different in that the suffix from dumpbase is retained.
When it comes to auxiliary and dump outputs created during LTO recompilation, a combination of dumppfx and dumpbase, as given or as derived from the linker output name but not from inputs, even in cases in which this combination would not otherwise be used as such, is passed down with a trailing period replacing the compiler-added dash, if any, as a -dumpdir option to lto-wrapper; being involved in linking, this program does not normally get any -dumpbase and -dumpbase-ext, and it ignores them.
When running sub-compilers, lto-wrapper appends LTO stage names to the received dumppfx, ensures it contains a directory component so that it overrides any -dumpdir, and passes that as -dumpbase to sub- compilers.
-v  Print (on standard error output) the commands executed to run the stages of compilation.  Also print the version number of the compiler driver program and of the preprocessor and the compiler proper.
-### Like -v except the commands are not executed and arguments are quoted unless they contain only alphanumeric characters or "./-_".  This is useful for shell scripts to capture the driver-generated command lines.
--help Print (on the standard output) a description of the command-line options understood by gcc.  If the -v option is also specified then --help is also passed on to the various processes invoked by gcc, so that they can display the command-line options they accept.  If the -Wextra option has also been specified (prior to the --help option), then command-line options that have no documentation associated with them are also displayed.
--target-help Print (on the standard output) a description of target-specific command-line options for each tool.  For some targets extra target- specific information may also be printed.
--help={class|[^]qualifier}[,...] Print (on the standard output) a description of the command-line options understood by the compiler that fit into all specified classes and qualifiers.  These are the supported classes:
optimizers Display all of the optimization options supported by the compiler.
warnings Display all of the options controlling warning messages produced by the compiler.
target Display target-specific options.  Unlike the --target-help option however, target-specific options of the linker and assembler are not displayed.  This is because those tools do not currently support the extended --help= syntax.
params Display the values recognized by the --param option.
language Display the options supported for language, where language is the name of one of the languages supported in this version of GCC. If an option is supported by all languages, one needs to select common class.
common Display the options that are common to all languages.
These are the supported qualifiers:
undocumented Display only those options that are undocumented.
joined Display options taking an argument that appears after an equal sign in the same continuous piece of text, such as: --help=target.
separate Display options taking an argument that appears as a separate word following the original option, such as: -o output-file.
Thus for example to display all the undocumented target-specific switches supported by the compiler, use:
--help=target,undocumented
The sense of a qualifier can be inverted by prefixing it with the ^ character, so for example to display all binary warning options (i.e., ones that are either on or off and that do not take an argument) that have a description, use:
--help=warnings,^joined,^undocumented
The argument to --help= should not consist solely of inverted qualifiers.
Combining several classes is possible, although this usually restricts the output so much that there is nothing to display.  One case where it does work, however, is when one of the classes is target.  For example, to display all the target-specific optimization options, use:
--help=target,optimizers
The --help= option can be repeated on the command line.  Each successive use displays its requested class of options, skipping those that have already been displayed.  If --help is also specified anywhere on the command line then this takes precedence over any --help= option.
If the -Q option appears on the command line before the --help= option, then the descriptive text displayed by --help= is changed. Instead of describing the displayed options, an indication is given as to whether the option is enabled, disabled or set to a specific value (assuming that the compiler knows this at the point where the --help= option is used).
Here is a truncated example from the ARM port of gcc:
% gcc -Q -mabi=2 --help=target -c The following options are target specific: -mabi=                                2 -mabort-on-noreturn                   [disabled] -mapcs                                [disabled]
The output is sensitive to the effects of previous command-line options, so for example it is possible to find out which optimizations are enabled at -O2 by using:
-Q -O2 --help=optimizers
Alternatively you can discover which binary optimizations are enabled by -O3 by using:
gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts diff /tmp/O2-opts /tmp/O3-opts | grep enabled
--version Display the version number and copyrights of the invoked GCC.
-pass-exit-codes Normally the gcc program exits with the code of 1 if any phase of the compiler returns a non-success return code.  If you specify -pass-exit-codes, the gcc program instead returns with the numerically highest error produced by any phase returning an error indication.  The C, C++, and Fortran front ends return 4 if an internal compiler error is encountered.
-pipe Use pipes rather than temporary files for communication between the various stages of compilation.  This fails to work on some systems where the assembler is unable to read from a pipe; but the GNU assembler has no trouble.
-specs=file Process file after the compiler reads in the standard specs file, in order to override the defaults which the gcc driver program uses when determining what switches to pass to cc1, cc1plus, as, ld, etc.  More than one -specs=file can be specified on the command line, and they are processed in order, from left to right.
-wrapper Invoke all subcommands under a wrapper program.  The name of the wrapper program and its parameters are passed as a comma separated list.
gcc -c t.c -wrapper gdb,--args
This invokes all subprograms of gcc under gdb --args, thus the invocation of cc1 is gdb --args cc1 ....
-ffile-prefix-map=old=new When compiling files residing in directory old, record any references to them in the result of the compilation as if the files resided in directory new instead.  Specifying this option is equivalent to specifying all the individual -f*-prefix-map options.  This can be used to make reproducible builds that are location independent.  See also -fmacro-prefix-map and -fdebug-prefix-map.
-fplugin=name.so Load the plugin code in file name.so, assumed to be a shared object to be dlopen'd by the compiler.  The base name of the shared object file is used to identify the plugin for the purposes of argument parsing (See -fplugin-arg-name-key=value below).  Each plugin should define the callback functions specified in the Plugins API.
-fplugin-arg-name-key=value Define an argument called key with a value of value for the plugin called name.
-fdump-ada-spec[-slim] For C and C++ source and include files, generate corresponding Ada specs.
-fada-spec-parent=unit In conjunction with -fdump-ada-spec[-slim] above, generate Ada specs as child units of parent unit.
-fdump-go-spec=file For input files in any language, generate corresponding Go declarations in file.  This generates Go "const", "type", "var", and "func" declarations which may be a useful way to start writing a Go interface to code written in some other language.
@file Read command-line options from file.  The options read are inserted in place of the original @file option.  If file does not exist, or cannot be read, then the option will be treated literally, and not removed.
Options in file are separated by whitespace.  A whitespace character may be included in an option by surrounding the entire option in either single or double quotes.  Any character (including a backslash) may be included by prefixing the character to be included with a backslash.  The file may itself contain additional @file options; any such options will be processed recursively.
Compiling C++ Programs C++ source files conventionally use one of the suffixes .C, .cc, .cpp, .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or (for shared template code) .tcc; and preprocessed C++ files use the suffix .ii.  GCC recognizes files with these names and compiles them as C++ programs even if you call the compiler the same way as for compiling C programs (usually with the name gcc).
However, the use of gcc does not add the C++ library.  g++ is a program that calls GCC and automatically specifies linking against the C++ library.  It treats .c, .h and .i files as C++ source files instead of C source files unless -x is used.  This program is also useful when precompiling a C header file with a .h extension for use in C++ compilations.  On many systems, g++ is also installed with the name c++.
When you compile C++ programs, you may specify many of the same command- line options that you use for compiling programs in any language; or command-line options meaningful for C and related languages; or options that are meaningful only for C++ programs.
Options Controlling C Dialect The following options control the dialect of C (or languages derived from C, such as C++, Objective-C and Objective-C++) that the compiler accepts:
-ansi In C mode, this is equivalent to -std=c90. In C++ mode, it is equivalent to -std=c++98.
This turns off certain features of GCC that are incompatible with ISO C90 (when compiling C code), or of standard C++ (when compiling C++ code), such as the "asm" and "typeof" keywords, and predefined macros such as "unix" and "vax" that identify the type of system you are using.  It also enables the undesirable and rarely used ISO trigraph feature.  For the C compiler, it disables recognition of C++ style // comments as well as the "inline" keyword.
The alternate keywords "__asm__", "__extension__", "__inline__" and "__typeof__" continue to work despite -ansi.  You would not want to use them in an ISO C program, of course, but it is useful to put them in header files that might be included in compilations done with -ansi.  Alternate predefined macros such as "__unix__" and "__vax__" are also available, with or without -ansi.
The -ansi option does not cause non-ISO programs to be rejected gratuitously.  For that, -Wpedantic is required in addition to -ansi.
The macro "__STRICT_ANSI__" is predefined when the -ansi option is used.  Some header files may notice this macro and refrain from declaring certain functions or defining certain macros that the ISO standard doesn't call for; this is to avoid interfering with any programs that might use these names for other things.
Functions that are normally built in but do not have semantics defined by ISO C (such as "alloca" and "ffs") are not built-in functions when -ansi is used.
-std= Determine the language standard.   This option is currently only supported when compiling C or C++.
The compiler can accept several base standards, such as c90 or c++98, and GNU dialects of those standards, such as gnu90 or gnu++98.  When a base standard is specified, the compiler accepts all programs following that standard plus those using GNU extensions that do not contradict it.  For example, -std=c90 turns off certain features of GCC that are incompatible with ISO C90, such as the "asm" and "typeof" keywords, but not other GNU extensions that do not have a meaning in ISO C90, such as omitting the middle term of a "?:" expression. On the other hand, when a GNU dialect of a standard is specified, all features supported by the compiler are enabled, even when those features change the meaning of the base standard.  As a result, some strict-conforming programs may be rejected.  The particular standard is used by -Wpedantic to identify which features are GNU extensions given that version of the standard. For example -std=gnu90 -Wpedantic warns about C++ style // comments, while -std=gnu99 -Wpedantic does not.
A value for this option must be provided; possible values are
c90 c89 iso9899:1990 Support all ISO C90 programs (certain GNU extensions that conflict with ISO C90 are disabled). Same as -ansi for C code.
iso9899:199409 ISO C90 as modified in amendment 1.
c99 c9x iso9899:1999 iso9899:199x ISO C99.  This standard is substantially completely supported, modulo bugs and floating-point issues (mainly but not entirely relating to optional C99 features from Annexes F and G).  See <http://gcc.gnu.org/c99status.html> for more information.  The names c9x and iso9899:199x are deprecated.
c11 c1x iso9899:2011 ISO C11, the 2011 revision of the ISO C standard.  This standard is substantially completely supported, modulo bugs, floating- point issues (mainly but not entirely relating to optional C11 features from Annexes F and G) and the optional Annexes K (Bounds-checking interfaces) and L (Analyzability).  The name c1x is deprecated.
c17 c18 iso9899:2017 iso9899:2018 ISO C17, the 2017 revision of the ISO C standard (published in 2018).  This standard is same as C11 except for corrections of defects (all of which are also applied with -std=c11) and a new value of "__STDC_VERSION__", and so is supported to the same extent as C11.
c2x The next version of the ISO C standard, still under development. The support for this version is experimental and incomplete.
gnu90 gnu89 GNU dialect of ISO C90 (including some C99 features).
gnu99 gnu9x GNU dialect of ISO C99.  The name gnu9x is deprecated.
gnu11 gnu1x GNU dialect of ISO C11.  The name gnu1x is deprecated.
gnu17 gnu18 GNU dialect of ISO C17.  This is the default for C code.
gnu2x The next version of the ISO C standard, still under development, plus GNU extensions.  The support for this version is experimental and incomplete.
c++98 c++03 The 1998 ISO C++ standard plus the 2003 technical corrigendum and some additional defect reports. Same as -ansi for C++ code.
gnu++98 gnu++03 GNU dialect of -std=c++98.
c++11 c++0x The 2011 ISO C++ standard plus amendments.  The name c++0x is deprecated.
gnu++11 gnu++0x GNU dialect of -std=c++11.  The name gnu++0x is deprecated.
c++14 c++1y The 2014 ISO C++ standard plus amendments.  The name c++1y is deprecated.
gnu++14 gnu++1y GNU dialect of -std=c++14.  The name gnu++1y is deprecated.
c++17 c++1z The 2017 ISO C++ standard plus amendments.  The name c++1z is deprecated.
gnu++17 gnu++1z GNU dialect of -std=c++17.  This is the default for C++ code. The name gnu++1z is deprecated.
c++20 c++2a The 2020 ISO C++ standard plus amendments.  Support is experimental, and could change in incompatible ways in future releases.  The name c++2a is deprecated.
gnu++20 gnu++2a GNU dialect of -std=c++20.  Support is experimental, and could change in incompatible ways in future releases.  The name gnu++2a is deprecated.
c++2b c++23 The next revision of the ISO C++ standard, planned for 2023. Support is highly experimental, and will almost certainly change in incompatible ways in future releases.
gnu++2b gnu++23 GNU dialect of -std=c++2b.  Support is highly experimental, and will almost certainly change in incompatible ways in future releases.
-fgnu89-inline The option -fgnu89-inline tells GCC to use the traditional GNU semantics for "inline" functions when in C99 mode.
Using this option is roughly equivalent to adding the "gnu_inline" function attribute to all inline functions.