GCC目前支持的语言有C, C++,Objective-C, Objective-C++, Java, Fortran, Ada, 和 Go。
每种可被GCC编译的语言都有一个标准,GCC试图遵循一种或者更多不同版本的标准,可能有一些特殊情况,有时也会有一些扩展。
GCC支持三种版本的C标准,不过对最新版本还没有完全支持。我们都知道C89,如果你想要选择GCC对C89标准的支持你应该使用如下选项之一:‘-ansi’,‘-std=c90’ or‘-std=iso9899:1990’;为了更加严格的依据标准进行编译,你还应该明确指定‘-pedantic’or ‘-pedantic-errors’。1994和1996年纠正了C89中的一些错误,GCC不支持错误的版本。
1990年的修正标准于1995年出版。这个修正后的标准被称为C94或C95。要想选择这个标准,在编译时使用选项“-std=iso9899:199409”(,至于其他标准版本,可以指定“pedantic”选项获得所有必需的错误检查)。
新版ISO C标准于1999年出版即:ISO / IEC 9899:1999,通常被称为C99。GCC4.9.1完全支持这个版本的标准,具体细节可以参考:http://gcc.gnu.org/gcc - 4.6 / - c99status.html。要想选择这个标准,编译时使用“-std=c99”或“-std=iso9899:1999”。
1999 ISO C标准中的错误在三个技术勘误中被纠正。这些刊物分别在2001年,2004年和2007年出版。GCC不支持未修正的版本。第四个版本的C标准,称为C11,GCC4.9.1完全支持这个标准,可以使用选项“-std=c11”或者“std=iso9899:2011”。ISO / IEC 9899:2011出版于2011年
默认情况下,GCC会提供一些扩展,用-std选项可以禁止这些扩展,你也可以选择GCC对具体某个标准版本的扩展,用‘-std=gnu90’将使用GNU对C90的扩展,-std=gnu99,-std=gnu11道理是一样的。默认情况下如果没有任何C语言的标准选项,GCC默认的选项将会是‘-std=gnu90’。不久的将来会改变默认选项为‘-std=gnu11’.
GCC支持ISO标准C++98和实验性的标准C++11,最初发布的c++标准是:(ISO / IEC 14882:1998)
修改技术勘误出版于2003年(ISO / IEC 14882:2003)。这些标准分别被称为C++98和C++03。GCC实现了绝大多数C++98(export是一个显著的例外)和大部分在C++03中所做的变化。选择这个标准应该使用“-ansi”,“-std=c++98”,或“-std=c++03”中的其中一个选项。为了更加严格的依据标准进行编译,你还应该明确指定‘-pedantic’or ‘-pedantic-errors’。
重新制定的ISO C++标准ISO / IEC 14882:2011于2011年出版,被称为C++11;出版之前,被称为C++0x。C++11包含一些变化,其中大部分新特性GCC已经在实验性的C++11模式下实现。关于实验性的C++11模式下的C++11特性,参见http://gcc.gnu.org/projects/cxx0x.html。在GCC中选择这个标准,应该使用选项‘-std=c++11’, 为了更加严格的依据标准进行编译,你还应该明确指定‘-pedantic’or ‘-pedantic-errors’。
关于C++标准的更多信息可以参考ISO C++委员会的网站http://www.open-std.org/jtc1/sc22/wg21/。
默认情况下,GCC提供了一些C++语言的扩展,使用上面列出的“‘-std”选项将禁用这些扩展。你也可以明确地选择一个扩展版的C++语言。‘-std=gnu++98’(GNU对C+98的扩展) 或者‘-std=gnu++11’ (GNU对C+11的扩展). 默认情况下,如果没有c++语言的标准选项, GCC默认的方言(即土话,意思是说gnu的选项而非标准的C语言)选项将会是‘-std=gnu++98’。。
当您调用GCC时,它通常会将预处理、编译、汇编和链接四个阶段一起执行。“一些命令行选项”能够让你停止在这个过程的某一个中间阶段。例如' c '选项将会命令GCC不要运行连接器。然后输出包含对象文件的汇编程序。其他选项用在某一个处理阶段。还有一些选项用于控制预处理器和编译器本身。然而,其他选项控制汇编和链接器;大多数选项没有记录在这里,因为你很少需要使用其中的任何一个选项。
您可以使用大多数对C程序有效的命令行选项,当一个选项是针对另一种语言(通常是c++)的,这种情况会被明确指定的(也就是说没有明确指定的选项都是可以用于控制C程序的编译的)。如果描述某个特定的选项时没有提到它支持哪种语言,这就代表您可以将该选项用于GCC支持的所有语言的编译中。
GCC接受命令行参数和文件名作为操作数,有许多命令行选项是多个字母的组合,他们不能被分开。例如:‘-dv’与‘-d -v’是完全不同的,你可以混合使用命令行参数,通常情况下这些参数的顺序没什么影响,但是当你用相同的参数时它们的顺序将是重要的,例如你指定多个‘L’参数,那么目录被搜索的次序将被明确指定。‘l’选项的位置也是重要的。
许多名字很长的选项以‘f’或‘W’开始,例如‘-fmove-loop-invariants’, ‘-Wformat’这些选项大部分都有两种形式,一种简单的一种复杂的。例如‘-ffoo’的复杂形式是‘-fno-foo’。本手册只用其中的一种形式。但使用哪一种也不是默认的。
本节是所有选项按类型分组后的摘要,它们将会被接下来的章节具体描述。
1. 全局选项:(这些选项控制GCC编译器输出文件的类型,即控制GCC的编译阶段。具体参考3.2节)
-c -S -E -o file -no-canonical-prefixes
-pipe -pass-exit-codes
-x language -v -### --help[=class[,...]] --target-help
--version -wrapper @file -fplugin=file -fplugin-arg-name=arg
-fdump-ada-spec[-slim] -fada-spec-parent=unit -fdump-go-spec=file
2.C语言选项:(这些选项用于控制C语言标准和GNU扩展的一些东西)
-ansi -std=standard -fgnu89-inline
-aux-info filename -fallow-parameterless-variadic-functions
-fno-asm -fno-builtin -fno-builtin-function
-fhosted -ffreestanding-fopenmp -fopenmp-simd -fms-extensions
-fplan9-extensions -trigraphs-traditional -traditional-cpp
-fallow-single-precision-fcond-mismatch -flax-vector-conversions
-fsigned-bitfields-fsigned-char
-funsigned-bitfields-funsigned-char
3.C++语言选项:(这些选项用于控制C++语言标准和GNU扩展的一些东西)
-fabi-version=n-fno-access-control -fcheck-new
-fconstexpr-depth=n-ffriend-injection
-fno-elide-constructors
-fno-enforce-eh-specs
-ffor-scope -fno-for-scope-fno-gnu-keywords
-fno-implicit-templates
-fno-implicit-inline-templates
-fno-implement-inlines-fms-extensions
-fno-nonansi-builtins-fnothrow-opt -fno-operator-names
-fno-optional-diags -fpermissive
-fno-pretty-templates
-frepo -fno-rtti -fstats-ftemplate-backtrace-limit=n
-ftemplate-depth=n
-fno-threadsafe-statics-fuse-cxa-atexit -fno-weak -nostdinc++
-fvisibility-inlines-hidden
-fvtable-verify=std|preinit|none
-fvtv-counts -fvtv-debug
-fvisibility-ms-compat
-fext-numeric-literals
-Wabi -Wconversion-null-Wctor-dtor-privacy
-Wdelete-non-virtual-dtor-Wliteral-suffix -Wnarrowing
-Wnoexcept -Wnon-virtual-dtor-Wreorder
-Weffc++-Wstrict-null-sentinel
-Wno-non-template-friend-Wold-style-cast
-Woverloaded-virtual-Wno-pmf-conversions
-Wsign-promo
4. Objective-C 和 Objective-C++ 选项
-fconstant-string-class=class-name
-fgnu-runtime -fnext-runtime
-fno-nil-receivers
-fobjc-abi-version=n
-fobjc-call-cxx-cdtors
-fobjc-direct-dispatch
-fobjc-exceptions
-fobjc-gc
-fobjc-nilcheck
-fobjc-std=objc1
-freplace-objc-classes
-fzero-link
-gen-decls
-Wassign-intercept
-Wno-protocol -Wselector
-Wstrict-selector-match
-Wundeclared-selector
5.语言无关选项(用于控制调试消息的格式)
-fmessage-length=n
-fdiagnostics-show-location=[once|every-line]
-fdiagnostics-color=[auto|never|always]
-fno-diagnostics-show-option-fno-diagnostics-show-caret
6.警告选项(用于控制GCC对警告的汇报情况)
-fsyntax-only -fmax-errors=n-Wpedantic
-pedantic-errors
-w -Wextra -Wall -Waddress-Waggregate-return
-Waggressive-loop-optimizations-Warray-bounds
-Wno-attributes-Wno-builtin-macro-redefined
-Wc++-compat -Wc++11-compat-Wcast-align -Wcast-qual
-Wchar-subscripts -Wclobbered-Wcomment -Wconditionally-supported
-Wconversion-Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp
-Wno-deprecated-Wno-deprecated-declarations -Wdisabled-optimization
-Wno-div-by-zero-Wdouble-promotion -Wempty-body -Wenum-compare
-Wno-endif-labels -Werror-Werror=*
-Wfatal-errors -Wfloat-equal-Wformat -Wformat=2
-Wno-format-contains-nul-Wno-format-extra-args -Wformat-nonliteral
-Wformat-security-Wformat-y2k
-Wframe-larger-than=len-Wno-free-nonheap-object -Wjump-misses-init
-Wignored-qualifiers
-Wimplicit-Wimplicit-function-declaration -Wimplicit-int
-Winit-self -Winline-Wmaybe-uninitialized
-Wno-int-to-pointer-cast-Wno-invalid-offsetof
-Winvalid-pch-Wlarger-than=len -Wunsafe-loop-optimizations
-Wlogical-op -Wlong-long
-Wmain -Wmaybe-uninitialized-Wmissing-braces -Wmissing-field-initializers
-Wmissing-include-dirs
-Wno-multichar -Wnonnull-Wno-overflow -Wopenmp-simd
-Woverlength-strings -Wpacked-Wpacked-bitfield-compat -Wpadded
-Wparentheses-Wpedantic-ms-format -Wno-pedantic-ms-format
-Wpointer-arith-Wno-pointer-to-int-cast
-Wredundant-decls-Wno-return-local-addr
-Wreturn-type-Wsequence-point -Wshadow
-Wsign-compare-Wsign-conversion -Wfloat-conversion
-Wsizeof-pointer-memaccess
-Wstack-protector-Wstack-usage=len -Wstrict-aliasing
-Wstrict-aliasing=n
-Wstrict-overflow-Wstrict-overflow=n
-Wsuggest-attribute=[pure|const|noreturn|format]
-Wmissing-format-attribute
-Wswitch -Wswitch-default-Wswitch-enum -Wsync-nand
-Wsystem-headers-Wtrampolines -Wtrigraphs -Wtype-limits -Wundef
-Wuninitialized-Wunknown-pragmas -Wno-pragmas
-Wunsuffixed-float-constants-Wunused -Wunused-function
-Wunused-label-Wunused-local-typedefs -Wunused-parameter
-Wno-unused-result-Wunused-value
-Wunused-variable
-Wunused-but-set-parameter-Wunused-but-set-variable
-Wuseless-cast-Wvariadic-macros -Wvector-operation-performance
-Wvla -Wvolatile-register-var-Wwrite-strings -Wzero-as-null-pointer-constant
7. C 和 Objective-C 的警告选项
-Wbad-function-cast -Wmissing-declarations
-Wmissing-parameter-type-Wmissing-prototypes -Wnested-externs
-Wold-style-declaration-Wold-style-definition
-Wstrict-prototypes-Wtraditional -Wtraditional-conversion
-Wdeclaration-after-statement-Wpointer-sign
8.调试开关(调试自己的程序或者GCC本身)
-dletters -dumpspecs -dumpmachine-dumpversion
-fsanitize=style
-fdbg-cnt-list-fdbg-cnt=counter-value-list
-fdisable-ipa-pass_name
-fdisable-rtl-pass_name
-fdisable-rtl-pass-name=range-list
-fdisable-tree-pass_name
-fdisable-tree-pass-name=range-list
-fdump-noaddr-fdump-unnumbered -fdump-unnumbered-links
-fdump-translation-unit[-n]
-fdump-class-hierarchy[-n]
-fdump-ipa-all -fdump-ipa-cgraph-fdump-ipa-inline
-fdump-passes
-fdump-statistics
-fdump-tree-all
-fdump-tree-original[-n]
-fdump-tree-optimized[-n]
-fdump-tree-cfg-fdump-tree-alias
-fdump-tree-ch
-fdump-tree-ssa[-n]-fdump-tree-pre[-n]
-fdump-tree-ccp[-n]-fdump-tree-dce[-n]
-fdump-tree-gimple[-raw]
-fdump-tree-dom[-n]
-fdump-tree-dse[-n]
-fdump-tree-phiprop[-n]
-fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n]
-fdump-tree-copyrename[-n]
-fdump-tree-nrv-fdump-tree-vect
-fdump-tree-sink
-fdump-tree-sra[-n]
-fdump-tree-forwprop[-n]
-fdump-tree-fre[-n]
-fdump-tree-vtable-verify
-fdump-tree-vrp[-n]
-fdump-tree-storeccp[-n]
-fdump-final-insns=file
-fcompare-debug[=opts]-fcompare-debug-second
-feliminate-dwarf2-dups-fno-eliminate-unused-debug-types
-feliminate-unused-debug-symbols-femit-class-debug-always
-fenable-kind-pass
-fenable-kind-pass=range-list
-fdebug-types-section-fmem-report-wpa
-fmem-report-fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
-fopt-info
-fopt-info-options[=file]
-frandom-seed=string-fsched-verbose=n
-fsel-sched-verbose-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
-fstack-usage -ftest-coverage-ftime-report -fvar-tracking
-fvar-tracking-assignments-fvar-tracking-assignments-toggle
-g -glevel -gtoggle -gcoff-gdwarf-version
-ggdb -grecord-gcc-switches-gno-record-gcc-switches
-gstabs -gstabs+-gstrict-dwarf -gno-strict-dwarf
-gvms -gxcoff -gxcoff+
-fno-merge-debug-strings-fno-dwarf2-cfi-asm
-fdebug-prefix-map=old=new
-femit-struct-debug-baseonly-femit-struct-debug-reduced
-femit-struct-debug-detailed[=spec-list]
-p -pg-print-file-name=library -print-libgcc-file-name
-print-multi-directory-print-multi-lib -print-multi-os-directory
-print-prog-name=program-print-search-dirs -Q
-print-sysroot-print-sysroot-headers-suffix
-save-temps -save-temps=cwd-save-temps=obj -time[=file]
9.优化选项
-faggressive-loop-optimizations-falign-functions[=n]
-falign-jumps[=n]
-falign-labels[=n]-falign-loops[=n]
-fassociative-math-fauto-inc-dec -fbranch-probabilities
-fbranch-target-load-optimize-fbranch-target-load-optimize2
-fbtr-bb-exclusive-fcaller-saves
-fcheck-data-deps-fcombine-stack-adjustments -fconserve-stack
-fcompare-elim-fcprop-registers -fcrossjumping
-fcse-follow-jumps-fcse-skip-blocks -fcx-fortran-rules
-fcx-limited-range
-fdata-sections -fdce-fdelayed-branch
-fdelete-null-pointer-checks-fdevirtualize -fdevirtualize-speculatively -
fdse
-fearly-inlining -fipa-sra-fexpensive-optimizations -ffat-lto-objects
-ffast-math-ffinite-math-only -ffloat-store -fexcess-precision=style
-fforward-propagate-ffp-contract=style -ffunction-sections
-fgcse -fgcse-after-reload-fgcse-las -fgcse-lm -fgraphite-identity
-fgcse-sm-fhoist-adjacent-loads -fif-conversion
-fif-conversion2-findirect-inlining
-finline-functions -finline-functions-called-once-finline-limit=n
-finline-small-functions-fipa-cp -fipa-cp-clone
-fipa-pta -fipa-profile-fipa-pure-const -fipa-reference
-fira-algorithm=algorithm
-fira-region=region-fira-hoist-pressure
-fira-loop-pressure-fno-ira-share-save-slots
-fno-ira-share-spill-slots-fira-verbose=n
-fisolate-erroneous-paths-dereference-fisolate-erroneous-paths-attribute -
fivopts-fkeep-inline-functions -fkeep-static-consts -flive-range-shrinkage
-floop-block-floop-interchange -floop-strip-mine -floop-nest-optimize
-floop-parallelize-all -flto-flto-compression-level
-flto-partition=alg-flto-report -flto-report-wpa -fmerge-all-constants
-fmerge-constants-fmodulo-sched -fmodulo-sched-allow-regmoves
-fmove-loop-invariants-fno-branch-count-reg
-fno-defer-pop-fno-function-cse -fno-guess-branch-probability
-fno-inline -fno-math-errno-fno-peephole -fno-peephole2
-fno-sched-interblock-fno-sched-spec -fno-signed-zeros
-fno-toplevel-reorder-fno-trapping-math -fno-zero-initialized-in-bss
-fomit-frame-pointer-foptimize-sibling-calls
-fpartial-inlining-fpeel-loops -fpredictive-commoning
-fprefetch-loop-arrays-fprofile-report
-fprofile-correction-fprofile-dir=path -fprofile-generate
-fprofile-generate=path
-fprofile-use-fprofile-use=path -fprofile-values -fprofile-reorder-functions
-freciprocal-math -free-frename-registers -freorder-blocks
-freorder-blocks-and-partition-freorder-functions
-frerun-cse-after-loop-freschedule-modulo-scheduled-loops
-frounding-math-fsched2-use-superblocks -fsched-pressure
-fsched-spec-load-fsched-spec-load-dangerous
14 Using the GNU CompilerCollection (GCC)
-fsched-stalled-insns-dep[=n]-fsched-stalled-insns[=n]
-fsched-group-heuristic-fsched-critical-path-heuristic
-fsched-spec-insn-heuristic-fsched-rank-heuristic
-fsched-last-insn-heuristic-fsched-dep-count-heuristic
-fschedule-insns-fschedule-insns2 -fsection-anchors
-fselective-scheduling-fselective-scheduling2
-fsel-sched-pipelining-fsel-sched-pipelining-outer-loops
-fshrink-wrap-fsignaling-nans -fsingle-precision-constant
-fsplit-ivs-in-unroller-fsplit-wide-types -fstack-protector
-fstack-protector-all-fstack-protector-strong -fstrict-aliasing
-fstrict-overflow-fthread-jumps -ftracer -ftree-bit-ccp
-ftree-builtin-call-dce-ftree-ccp -ftree-ch
-ftree-coalesce-inline-vars-ftree-coalesce-vars -ftree-copy-prop
-ftree-copyrename -ftree-dce-ftree-dominator-opts -ftree-dse
-ftree-forwprop -ftree-fre-ftree-loop-if-convert
-ftree-loop-if-convert-stores-ftree-loop-im
-ftree-phiprop-ftree-loop-distribution -ftree-loop-distribute-patterns
-ftree-loop-ivcanon-ftree-loop-linear -ftree-loop-optimize
-ftree-loop-vectorize
-ftree-parallelize-loops=n-ftree-pre -ftree-partial-pre -ftree-pta
-ftree-reassoc -ftree-sink-ftree-slsr -ftree-sra
-ftree-switch-conversion-ftree-tail-merge -ftree-ter
-ftree-vectorize -ftree-vrp
-funit-at-a-time-funroll-all-loops -funroll-loops
-funsafe-loop-optimizations-funsafe-math-optimizations -funswitch-loops
-fvariable-expansion-in-unroller-fvect-cost-model -fvpt -fweb
-fwhole-program -fwpa-fuse-ld=linker -fuse-linker-plugin
--param name=value -O -O0 -O1-O2 -O3 -Os -Ofast -Og
10.预处理选项
-Aquestion=answer
-A-question[=answer]
-C -dD -dI -dM -dN
-Dmacro[=defn] -E -H
-idirafter dir
-include file -imacros file
-iprefix file -iwithprefixdir
-iwithprefixbefore dir-isystem dir
-imultilib dir -isysroot dir
-M -MM -MF -MG -MP -MQ -MT-nostdinc
-P -fdebug-cpp-ftrack-macro-expansion -fworking-directory
-remap -trigraphs -undef-Umacro
-Wp,option -Xpreprocessoroption -no-integrated-cpp
11.汇编器选项
-Wa,option -Xassembler option
12.连接器选项
object-file-name -llibrary
-nostartfiles -nodefaultlibs-nostdlib -pie -rdynamic
-s -static -static-libgcc-static-libstdc++
-static-libasan-static-libtsan -static-liblsan -static-libubsan
-shared -shared-libgcc-symbolic
-T script -Wl,option -Xlinkeroption
-u symbol
13.目录选项(用于控制目录搜索)
-Bprefix -Idir-iplugindir=dir
-iquotedir -Ldir -specs=file-I-
--sysroot=dir--no-sysroot-suffix
14.机器相关选项
AArch64Options
-mabi=name -mbig-endian-mlittle-endian
-mgeneral-regs-only
-mcmodel=tiny -mcmodel=small-mcmodel=large
-mstrict-align
-momit-leaf-frame-pointer-mno-omit-leaf-frame-pointer
-mtls-dialect=desc-mtls-dialect=traditional
-march=name -mcpu=name-mtune=name
AdaptevaEpiphany Options
-mhalf-reg-file-mprefer-short-insn-regs
-mbranch-cost=num -mcmove-mnops=num -msoft-cmpsf
-msplit-lohi -mpost-inc-mpost-modify -mstack-offset=num
-mround-nearest -mlong-calls-mshort-calls -msmall16
-mfp-mode=mode -mvect-double-max-vect-align=num
-msplit-vecmove-early-m1reg-reg
ARCOptions
-mbarrel-shifter
-mcpu=cpu -mA6 -mARC600 -mA7-mARC700
-mdpfp -mdpfp-compact-mdpfp-fast -mno-dpfp-lrsr
-mea -mno-mpy -mmul32x16-mmul64
-mnorm -mspfp -mspfp-compact-mspfp-fast -msimd -msoft-float -mswap
-mcrc -mdsp-packa -mdvbf-mlock -mmac-d16 -mmac-24 -mrtsc -mswape
-mtelephony -mxy -misize-mannotate-align -marclinux -marclinux_prof
-mepilogue-cfi -mlong-calls-mmedium-calls -msdata
-mucb-mcount -mvolatile-cache
-malign-call-mauto-modify-reg -mbbit-peephole -mno-brcc
-mcase-vector-pcrel-mcompact-casesi -mno-cond-exec -mearly-cbranchsi
-mexpand-adddi-mindexed-loads -mlra -mlra-priority-none
-mlra-priority-compactmlra-priority-noncompact -mno-millicode
-mmixed-code -mq-class -mRcq-mRcw -msize-level=level
-mtune=cpu -mmultcost=num-munalign-prob-threshold=probability
ARMOptions
-mapcs-frame -mno-apcs-frame
-mabi=name
-mapcs-stack-check-mno-apcs-stack-check
-mapcs-float -mno-apcs-float
-mapcs-reentrant-mno-apcs-reentrant
-msched-prolog-mno-sched-prolog
-mlittle-endian -mbig-endian-mwords-little-endian
-mfloat-abi=name
-mfp16-format=name-mthumb-interwork -mno-thumb-interwork
-mcpu=name -march=name-mfpu=name
-mstructure-size-boundary=n
-mabort-on-noreturn
-mlong-calls -mno-long-calls
-msingle-pic-base -mno-single-pic-base
-mpic-register=reg
-mnop-fun-dllimport
-mpoke-function-name
-mthumb -marm
-mtpcs-frame-mtpcs-leaf-frame
-mcaller-super-interworking-mcallee-super-interworking
-mtp=name-mtls-dialect=dialect
-mword-relocations
-mfix-cortex-m3-ldrd
-munaligned-access
-mneon-for-64bits
-mslow-flash-data
-mrestrict-it
AVROptions
-mmcu=mcu -maccumulate-args-mbranch-cost=cost
-mcall-prologues -mint8-mno-interrupts -mrelax
-mstrict-X -mtiny-stack-Waddr-space-convert
BlackfinOptions
-mcpu=cpu[-sirevision]
-msim-momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer
-mspecld-anomaly-mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly
-mlow-64k -mno-low64k-mstack-check-l1 -mid-shared-library
-mno-id-shared-library-mshared-library-id=n
-mleaf-id-shared-library-mno-leaf-id-shared-library
-msep-data -mno-sep-data-mlong-calls -mno-long-calls
-mfast-fp -minline-plt-mmulticore -mcorea -mcoreb -msdram
-micplb
C6XOptions
-mbig-endian -mlittle-endian-march=cpu
-msim -msdata=sdata-type
CRISOptions
-mcpu=cpu -march=cpu-mtune=cpu
-mmax-stack-frame=n-melinux-stacksize=n
-metrax4 -metrax100 -mpdebug-mcc-init -mno-side-effects
-mstack-align -mdata-align-mconst-align
-m32-bit -m16-bit -m8-bit-mno-prologue-epilogue -mno-gotplt
-melf -maout -melinux -mlinux-sim -sim2
-mmul-bug-workaround-mno-mul-bug-workaround
CR16Options
-mmac
-mcr16cplus -mcr16c
-msim -mint32 -mbit-ops-mdata-model=model
DarwinOptions
-all_load -allowable_client-arch -arch_errors_fatal
-arch_only -bind_at_load -bundle-bundle_loader
-client_name-compatibility_version -current_version
-dead_strip
-dependency-file -dylib_file-dylinker_install_name
-dynamic -dynamiclib-exported_symbols_list
-filelist -flat_namespace-force_cpusubtype_ALL
-force_flat_namespace -headerpad_max_install_names
-iframework
-image_base -init-install_name -keep_private_externs
-multi_module-multiply_defined -multiply_defined_unused
-noall_load-no_dead_strip_inits_and_terms
-nofixprebinding -nomultidefs-noprebind -noseglinkedit
-pagezero_size -prebind-prebind_all_twolevel_modules
-private_bundle-read_only_relocs -sectalign
-sectobjectsymbols -whyload-seg1addr
-sectcreate-sectobjectsymbols -sectorder
-segaddr -segs_read_only_addr-segs_read_write_addr
-seg_addr_table-seg_addr_table_filename -seglinkedit
-segprot -segs_read_only_addr-segs_read_write_addr
-single_module -static-sub_library -sub_umbrella
-twolevel_namespace -umbrella-undefined
-unexported_symbols_list-weak_reference_mismatches
-whatsloaded -F -gused -gfull-mmacosx-version-min=version
-mkernel -mone-byte-bool
DECAlpha Options
-mno-fp-regs -msoft-float
-mieee -mieee-with-inexact-mieee-conformant
-mfp-trap-mode=mode-mfp-rounding-mode=mode
-mtrap-precision=mode-mbuild-constants
-mcpu=cpu-type-mtune=cpu-type
-mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee
-mexplicit-relocs-msmall-data -mlarge-data
-msmall-text -mlarge-text
-mmemory-latency=time
FR30Options
-msmall-model -mno-lsim
FRVOptions
-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/LinuxOptions
-mglibc -muclibc -mbionic-mandroid
-tno-android-cc-tno-android-ld
H8/300Options
-mrelax -mh -ms -mn -mexr-mno-exr -mint32 -malign-300
HPPAOptions
-march=architecture-type
-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
i386and x86-64 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-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
-mmmx -msse -msse2 -msse3-mssse3 -msse4.1 -msse4.2 -msse4 -mavx
-mavx2 -mavx512f -mavx512pf-mavx512er -mavx512cd -msha
-maes -mpclmul -mfsgsbase-mrdrnd -mf16c -mfma -mprefetchwt1
-msse4a -m3dnow -mpopcnt-mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt
-mbmi2 -mfxsr -mxsave-mxsaveopt -mrtm -mlwp -mthreads
-mno-align-stringops-minline-all-stringops
-minline-stringops-dynamically-mstringop-strategy=alg
-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-mlarge-data-threshold=num
-msse2avx -mfentry-m8bit-idiv
-mavx256-split-unaligned-load-mavx256-split-unaligned-store
-mstack-protector-guard=guard
i386and x86-64 Windows Options
-mconsole -mcygwin-mno-cygwin -mdll
-mnop-fun-dllimport -mthread
-municode -mwin32 -mwindows-fno-set-stack-executable
IA-64Options
-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
LM32Options
-mbarrel-shift-enabled-mdivide-enabled -mmultiply-enabled
-msign-extend-enabled-muser-enabled
M32R/DOptions
-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
M32COptions
-mcpu=cpu -msim-memregs=number
M680x0Options
-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
MCoreOptions
-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
MePOptions
-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
MicroBlazeOptions
-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
MIPSOptions
-EL -EB -march=arch-mtune=arch
-mips1 -mips2 -mips3 -mips4-mips32 -mips32r2
-mips64 -mips64r2
-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 -mfp64-mhard-float -msoft-float
-mno-float -msingle-float-mdouble-float
-mabs=mode -mnan=encoding
-mdsp -mno-dsp -mdspr2-mno-dspr2
-mmcu -mmno-mcu
-meva -mno-eva
-mvirt -mno-virt
-mmicromips -mno-micromips
-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
-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-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
-mfp-exceptions-mno-fp-exceptions
-mvr4130-align-mno-vr4130-align -msynci -mno-synci
-mrelax-pic-calls-mno-relax-pic-calls -mmcount-ra-address
MMIXOptions
-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
MN10300Options
-mmult-bug -mno-mult-bug
-mno-am33 -mam33 -mam33-2-mam34
-mtune=cpu-type
-mreturn-pointer-on-d0
-mno-crt0 -mrelax -mliw-msetlb
MoxieOptions
-meb -mel -mno-crt0
MSP430Options
-msim -masm-hex -mmcu= -mcpu=-mlarge -msmall -mrelax
-mhwmult=
NDS32Options
-mbig-endian -mlittle-endian
-mreduced-regs -mfull-regs
-mcmov -mno-cmov
-mperf-ext -mno-perf-ext
-mv3push -mno-v3push
-m16bit -mno-16bit
-mgp-direct -mno-gp-direct
-misr-vector-size=num
-mcache-block-size=num
-march=arch
-mforce-fp-as-gp-mforbid-fp-as-gp
-mex9 -mctor-dtor -mrelax
NiosII Options
-G num -mgpopt -mno-gpopt-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
PDP-11Options
-mfpu -msoft-float -mac0-mno-ac0 -m40 -m45 -m10
-mbcopy -mbcopy-builtin-mint32 -mno-int16
-mint16 -mno-int32 -mfloat32-mno-float64
-mfloat64 -mno-float32-mabshi -mno-abshi
-mbranch-expensive-mbranch-cheap
-munix-asm -mdec-asm
picoChipOptions
-mae=ae_type-mvliw-lookahead=N
-msymbol-as-address-mno-inefficient-warnings
PowerPCOptions See RS/6000 and PowerPC Options.
RL78Options
-msim -mmul=none -mmul=g13-mmul=rl78
RS/6000and 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 -mmfpgpr-mno-mfpgpr -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
-msingle-float -mdouble-float-msimple-fpu
-mstring -mno-string -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 -maltivec-mswdiv -msingle-pic-base
-mprioritize-restricted-insns=priority
-msched-costly-dep=dependence_type
-minsert-sched-nops=scheme
-mcall-sysv -mcall-netbsd
-maix-struct-return-msvr4-struct-return
-mabi=abi-type -msecure-plt-mbss-plt
-mblock-move-inline-limit=num
-misel -mno-isel
-misel=yes -misel=no
-mspe -mno-spe
-mspe=yes -mspe=no
-mpaired
-mgen-cell-microcode-mwarn-cell-microcode
-mvrsave -mno-vrsave
-mmulhw -mno-mulhw
-mdlmzb -mno-dlmzb
-mfloat-gprs=yes-mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
-mprototype -mno-prototype
-msim -mmvme -mads-myellowknife -memb -msdata
-msdata=opt -mvxworks -G num-pthread
-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-mdirect-move -mno-direct-move
-mquad-memory-mno-quad-memory
-mquad-memory-atomic-mno-quad-memory-atomic
-mcompat-align-parm-mno-compat-align-parm
RXOptions
-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
-mno-warn-multiple-fast-interrupts
-msave-acc-in-interrupts
S/390and 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
-mtpf-trace -mno-tpf-trace-mfused-madd -mno-fused-madd
-mwarn-framesize-mwarn-dynamicstack -mstack-size -mstack-guard
-mhotpatch[=halfwords]-mno-hotpatch
ScoreOptions
-meb -mel
-mnhwloop
-muls
-mmac
-mscore5 -mscore5u -mscore7-mscore7d
SHOptions
-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
-m5-64media -m5-64media-nofpu
-m5-32media -m5-32media-nofpu
-m5-compact -m5-compact-nofpu
-mb -ml -mdalign -mrelax
-mbigtable -mfmovd -mhitachi-mrenesas -mno-renesas -mnomacsave
-mieee -mno-ieee -mbitops-misize -minline-ic_invalidate -mpadstruct
-mspace -mprefergot-musermode -multcost=number -mdiv=strategy
-mdivsi3_libfunc=name-mfixed-range=register-range
-mindexed-addressing-mgettrcost=number -mpt-fixed
-maccumulate-outgoing-args-minvalid-symbols
-matomic-model=atomic-model
-mbranch-cost=num -mzdcbranch-mno-zdcbranch
-mfused-madd -mno-fused-madd-mfsca -mno-fsca -mfsrra -mno-fsrra
-mpretend-cmove -mtas
Solaris2 Options
-mclear-hwcap-mno-clear-hwcap -mimpure-text -mno-impure-text
-pthreads -pthread
SPARCOptions
-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
-munaligned-doubles-mno-unaligned-doubles
-muser-mode -mno-user-mode
-mv8plus -mno-v8plus -mvis-mno-vis
-mvis2 -mno-vis2 -mvis3-mno-vis3
-mcbcond -mno-cbcond
-mfmaf -mno-fmaf -mpopc-mno-popc
-mfix-at697f -mfix-ut699
SPUOptions
-mwarn-reloc -merror-reloc
-msafe-dma -munsafe-dma
-mbranch-hints
-msmall-mem -mlarge-mem –mstdmain
-mfixed-range=register-range
-mea32 -mea64
-maddress-space-conversion-mno-address-space-conversion
-mcache-size=cache-size
-matomic-updates-mno-atomic-updates
SystemV Options
-Qy -Qn -YP,paths -Ym,dir
TILE-GxOptions
-mcpu=CPU -m32 -m64-mbig-endian -mlittle-endian
-mcmodel=code-model
TILEProOptions
-mcpu=cpu -m32
V850Options
-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
VAXOptions
-mg -mgnu -munix
VMSOptions
-mvms-return-codes-mdebug-main=prefix -mmalloc64
-mpointer-size=size
VxWorksOptions
-mrtp -non-static -Bstatic-Bdynamic
-Xbind-lazy -Xbind-now
x86-64Options See i386 and x86-64 Options.
Xstormy16Options
-msim
XtensaOptions
-mconst16 -mno-const16
-mfused-madd -mno-fused-madd
-mforce-no-pic
-mserialize-volatile-mno-serialize-volatile
-mtext-section-literals-mno-text-section-literals
-mtarget-align-mno-target-align
-mlongcalls -mno-longcalls
zSeriesOptions See S/390 and zSeries Options
15.代码生成选项(用于控制代码的生成)
-fcall-saved-reg-fcall-used-reg
-ffixed-reg -fexceptions
-fnon-call-exceptions -fdelete-dead-exceptions-funwind-tables
-fasynchronous-unwind-tables
-fno-gnu-unique
-finhibit-size-directive-finstrument-functions
-finstrument-functions-exclude-function-list=sym,sym,...
-finstrument-functions-exclude-file-list=file,file,...
-fno-common -fno-ident
-fpcc-struct-return -fpic-fPIC -fpie -fPIE
-fno-jump-tables
-frecord-gcc-switches
-freg-struct-return-fshort-enums
-fshort-double -fshort-wchar
-fverbose-asm-fpack-struct[=n] -fstack-check
-fstack-limit-register=reg-fstack-limit-symbol=sym
-fno-stack-limit-fsplit-stack
-fleading-underscore-ftls-model=model
-fstack-reuse=reuse_level
-ftrapv -fwrapv-fbounds-check
-fvisibility-fstrict-volatile-bitfields -fsync-libcalls
以上是GCC.9.1的命令行选项,接下来将对每类选项进行介绍,关于机器相关的选项,我们主要关注常见,常用的机器,计划主要关注:ARM选项,i386 and x86-64 选项,i386 and x86-64 Windows 选项,IA-64选项。对于其他选项可以参考GCC官方手册。我们也不关注Objective-C和Objective-C++语言的选项