گشتاسب مظفریان – GMozafarian

مشاور و توسعه دهنده نرم افزار -Adviser and Software Developer

آموزش تنظیمات کامپایلر GCC قسمت اول:معرفی

به نام اهورامزدای پاک

یکی از مقوله هایی که امروزه در بین برنامه نویسان و کتاب های آموزش برنامه نویسی در ایران بسیار سطحی پنداشته میشود و به راحتی از آن عبور میکنند موضوع مهمی به نام تنظیمات کامپایلر میباشد.

شاید از خود بپرسید چرا باید از تنظیمات کامپایلر استفاده کنیم ؟
دلایل زیادی برای استفاده از این تنظیمات وجود دارد که در زیر به چند مورد از آن ها اشاره می کنیم:

  1. افزاریش سرعت کامپایل و تست برنامه
  2. بهینه سازی و کامپایل برنامه برای یک پردازشگر خاص
  3. حذف اضافات کتابخانه ها و زبان
  4. تایین یک استاندارد خاص برای زبان مثلا C11 بجای C99
  5. و….

کامپایلر GCC دارای بخش های تنظیماتی بسیاری است که در زیر بخش های آن معرفی شده است:

Overall Options
این بخش شامل تنظیمات کلی کامپایلر است که شامل چهار بخش دیگر :preprocessing, compilation proper, assembly و linking می باشد.

-c -S -E -o file -pipe -v –help -x language

C Language Options
تنظیمات مربوط به زبان C

-ansi -flang-isoc9x -fallow-single-precision -fcond-mismatch -fno-asm
-fno-builtin -ffreestanding -fhosted -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char -fwritable-strings
-traditional -traditional-cpp -trigraphs

C++‎‎‎‎‎ Language Optionsتنظیمات مربوط به زبان ++C

-fno-access-control -fcheck-new -fconserve-space -fdollars-in-identifiers
-fno-elide-constructors -fexternal-templates -ffor-scope
-fno-for-scope -fno-gnu-keywords -fguiding-decls -fhandle-signatures
-fhonor-std -fhuge-objects -fno-implicit-templates -finit-priority
-fno-implement-inlines -fname-mangling-version-n -fno-default-inline
-foperator-names -fno-optional-diags -fpermissive -frepo -fstrict-prototype
-fsquangle -ftemplate-depth-n -fthis-is-variable -fvtable-thunks
-nostdinC++‎‎‎‎‎ -Wctor-dtor-privacy -Wno-deprecated -WeffC++‎‎‎‎‎
-Wno-non-template-friend
-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual
-Wno-pmf-conversions -Wreorder -Wsign-promo -Wsynth

Warning Options
تنظیمات مربوط به Warning

-fsyntax-only -pedantic -pedantic-errors
-w -W -Wall -Waggregate-return -Wbad-function-cast
-Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment
-Wconversion -Werror -Wformat
-Wid-clash-len -Wimplicit -Wimplicit-int
-Wimplicit-function-declaration -Wimport
-Werror-implicit-function-declaration -Winline
-Wlarger-than-len -Wlong-long
-Wmain -Wmissing-declarations -Wmissing-noreturn
-Wmissing-prototypes -Wmultichar -Wnested-externs -Wno-import
-Wparentheses -Wpointer-arith -Wredundant-decls
-Wreturn-type -Wshadow -Wsign-compare -Wstrict-prototypes
-Wswitch -Wtraditional
-Wtrigraphs -Wundef -Wuninitialized -Wunused -Wwrite-strings
-Wunknown-pragmas

Debugging Options
تنظیمات مربوط به Debugging

-a -ax -dletters -fdump-unnumbered -fpretend-float
-fprofile-arcs -ftest-coverage
-g -glevel -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2
-ggdb -gstabs -gstabs+ -gxcoff -gxcoff+
-p -pg -print-file-name=library -print-libgcc-file-name
-print-prog-name=program -print-search-dirs -save-temps

Optimization Options
تنظیمات مربوط به بهینه سازی

-fbranch-probabilities -foptimize-register-moves
-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
-fdelayed-branch -fexpensive-optimizations
-ffast-math -ffloat-store -fforce-addr -fforce-mem
-fdata-sections -ffunction-sections -fgcse
-finline-functions -finline-limit-n -fkeep-inline-functions
-fno-default-inline -fno-defer-pop -fno-function-cse
-fno-inline -fno-peephole -fomit-frame-pointer -fregmove
-frerun-cse-after-loop -frerun-loop-opt -fschedule-insns
-fschedule-insns2 -fstrength-reduce -fthread-jumps
-funroll-all-loops -funroll-loops
-fmove-all-movables -freduce-all-givs -fstrict-aliasing
-O -O0 -O1 -O2 -O3 -Os

Preprocessor Options
تنظیمات مربوط به پیش پردازنده

-Aquestion(answer) -C -dD -dM -dN
-Dmacro[=defn] -E -H
-idirafter dir
-include file -imacros file
-iprefix file -iwithprefix dir
-iwithprefixbefore dir -isystem dir -isystem-C++‎‎‎‎‎ dir
-M -MD -MM -MMD -MG -nostdinc -P -trigraphs
-undef -Umacro -Wp,option

Assembler Option
تنظیمات مربوط به اسمبلر

-Wa,option

Linker Options
تنظیمات مربوط به لینکر

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

Directory Options
تنظیمات مربوط به جستجوی دایرکتوری ها (دایرکتوری های فایل های هدر, کتابخانه های و بخش های مختلف کامپایلر)

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

Target Options
تنظیمات مربوط به معماری و ورژن ماشین

-b machine -V version

Machine Dependent Options
تنظیمات مربوط به پردازنده ها و سخت افزارها

M680x0 Options
-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040
-m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020
-mfpa -mnobitfield -mrtd -mshort -msoft-float
-malign-int

VAX Options
-mg -mgnu -munix

SPARC Options
-mcpu=cpu type
-mtune=cpu type
-mcmodel=code model
-malign-jumps=num -malign-loops=num
-malign-functions=num
-m32 -m64
-mapp-regs -mbroken-saverestore -mcypress -mepilogue
-mflat -mfpu -mhard-float -mhard-quad-float
-mimpure-text -mlive-g0 -mno-app-regs -mno-epilogue
-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

Convex Options
-mc1 -mc2 -mc32 -mc34 -mc38
-margcount -mnoargcount
-mlong32 -mlong64
-mvolatile-cache -mvolatile-nocache

AMD29K Options
-m29000 -m29050 -mbw -mnbw -mdw -mndw
-mlarge -mnormal -msmall
-mkernel-registers -mno-reuse-arg-regs
-mno-stack-check -mno-storem-bug
-mreuse-arg-regs -msoft-float -mstack-check
-mstorem-bug -muser-registers

ARM Options
-mapcs-frame -mno-apcs-frame
-mapcs-26 -mapcs-32
-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
-mshort-load-bytes -mno-short-load-bytes -mshort-load-words -mno-short-load-words
-msoft-float -mhard-float -mfpe
-mthumb-interwork -mno-thumb-interwork
-mcpu= -march= -mfpe=
-mstructure-size-boundary=
-mbsd -mxopen -mno-symrename
-mabort-on-noreturn
-mno-sched-prolog

Thumb Options
-mtpcs-frame -mno-tpcs-frame
-mtpcs-leaf-frame -mno-tpcs-leaf-frame
-mlittle-endian -mbig-endian
-mthumb-interwork -mno-thumb-interwork
-mstructure-size-boundary=

MN10200 Options
-mrelax

MN10300 Options
-mmult-bug
-mno-mult-bug
-mrelax

M32R/D Options
-mcode-model=model type -msdata=sdata type
-G num

M88K Options
-m88000 -m88100 -m88110 -mbig-pic
-mcheck-zero-division -mhandle-large-shift
-midentify-revision -mno-check-zero-division
-mno-ocs-debug-info -mno-ocs-frame-position
-mno-optimize-arg-area -mno-serialize-volatile
-mno-underscores -mocs-debug-info
-mocs-frame-position -moptimize-arg-area
-mserialize-volatile -mshort-data-num -msvr3
-msvr4 -mtrap-large-shift -muse-div-instruction
-mversion-03.00 -mwarn-passed-structs

RS/6000 and PowerPC Options
-mcpu=cpu type
-mtune=cpu type
-mpower -mno-power -mpower2 -mno-power2
-mpowerpc -mno-powerpc
-mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt
-mnew-mnemonics -mno-new-mnemonics
-mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc
-maix64 -maix32 -mxl-call -mno-xl-call -mthreads -mpe
-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
-mcall-aix -mcall-sysv -mprototype -mno-prototype
-msim -mmvme -mads -myellowknife -memb -msdata
-msdata=opt -G num

RT Options
-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
-mfull-fp-blocks -mhc-struct-return -min-line-mul
-mminimum-fp-blocks -mnohc-struct-return

MIPS Options
-mabicalls -mcpu=cpu type -membedded-data
-membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64
-mgpopt -mhalf-pic -mhard-float -mint64 -mips1
-mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy
-mmips-as -mmips-tfile -mno-abicalls
-mno-embedded-data -mno-embedded-pic
-mno-gpopt -mno-long-calls
-mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats
-mrnames -msoft-float
-m4650 -msingle-float -mmad
-mstats -EL -EB -G num -nocpp
-mabi=32 -mabi=n32 -mabi=64 -mabi=eabi

i386 Options
-mcpu=cpu type
-march=cpu type
-mieee-fp -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -msvr3-shlib
-mno-wide-multiply -mrtd -malign-double
-mreg-alloc=list -mregparm=num
-malign-jumps=num -malign-loops=num
-malign-functions=num -mpreferred-stack-boundary=num

HPPA Options
-march=architecture type
-mbig-switch -mdisable-fpregs -mdisable-indexing
-mfast-indirect-calls -mgas -mjump-in-delay
-mlong-load-store -mno-big-switch -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
-mno-space-regs -msoft-float -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime
-mschedule=cpu type -mspace -mspace-regs

Intel 960 Options
-mcpu type -masm-compat -mclean-linkage
-mcode-align -mcomplex-addr -mleaf-procedures
-mic-compat -mic2.0-compat -mic3.0-compat
-mintel-asm -mno-clean-linkage -mno-code-align
-mno-complex-addr -mno-leaf-procedures
-mno-old-align -mno-strict-align -mno-tail-call
-mnumerics -mold-align -msoft-float -mstrict-align
-mtail-call

DEC Alpha Options
-mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
-malpha-as -mgas
-mieee -mieee-with-inexact -mieee-conformant
-mfp-trap-mode=mode -mfp-rounding-mode=mode
-mtrap-precision=mode -mbuild-constants
-mcpu=cpu type
-mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max
-mmemory-latency=time

Clipper Options
-mc300 -mc400

H8/300 Options
-mrelax -mh -ms -mint32 -malign-300

SH Options
-m1 -m2 -m3 -m3e -mb -ml -mdalign -mrelax

System V Options
-Qy -Qn -YP,paths -Ym,dir

ARC Options
-EB -EL
-mmangle-cpu -mcpu=cpu -mtext=text section
-mdata=data section -mrodata=readonly data section

TMS320C3x/C4x Options
-mcpu=cpu -mbig -msmall -mregparm -mmemparm
-mfast-fix -mmpyi -mbk -mti -mdp-isr-reload
-mrpts=count -mrptb -mdb -mloop-unsigned
-mparallel-insns -mparallel-mpy -mpreserve-float

V850 Options
-mlong-calls -mno-long-calls -mep -mno-ep
-mprolog-function -mno-prolog-function -mspace
-mtda=n -msda=n -mzda=n
-mv850 -mbig-switch

NS32K Options
-m32032 -m32332 -m32532 -m32081 -m32381 -mmult-add -mnomult-add
-msoft-float -mrtd -mnortd -mregparam -mnoregparam -msb -mnosb
-mbitfield -mnobitfield -mhimem -mnohimem

Code Generation Options

-fcall-saved-reg -fcall-used-reg
-fexceptions -ffixed-reg -finhibit-size-directive
-fcheck-memory-usage -fprefix-function-name
-fno-common -fno-ident -fno-gnu-linker
-fpcc-struct-return -fpic -fPIC
-freg-struct-return -fshared-data -fshort-enums
-fshort-double -fvolatile -fvolatile-global -fvolatile-static
-fverbose-asm -fpack-struct -fstack-check
-fargument-alias -fargument-noalias
-fargument-noalias-global
-fleading-underscore

حال که ما مزایای تنظیمات کامپایلر , بخش ها و خلاصه ای از دستورات آشنا شدیم زمان شروع آموزش فرارسیده است در اینجا به دو صورت مختلف تنظیمات کامپایلر را آموزش میدهیم:
۱٫ با استفاده از خط فرمان
۲٫استفاده از IDE

پست های مرتبط

لینک کوتاه: http://GMozafarian.ir/sJTqC
GCCآموزشآموزش تنظیماتبهینه سازی برنامهبهینه سازی کامپایلرتنظیماتتنظیمات GCCتنظیمات کامپایلرکامپایلرمعرفیمعرفی تنظیمات کامپایلر

گشتاسب مظفریان گشتاسب مظفریان • اسفند ۲۳, ۱۳۹۴


پست‌های قبلی

پست‌های بعدی

پاسخ دهید

Your email address will not be published / Required fields are marked *