حرفه ای: آموزش تنظیمات کامپایلر 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 -fexteal-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


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


-fsyntax-only -pedantic -pedantic-errors
-w -W -Wall -Waggregate-retu -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-noretu
-Wmissing-prototypes -Wmultichar -Wnested-extes -Wno-import
-Wparentheses -Wpointer-arith -Wredundant-decls
-Wretu-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
-mkeel-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-noretu
-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 -mwa-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-retu -min-line-mul
-mminimum-fp-blocks -mnohc-struct-retu

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-ames -mno-stats
-mames -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-retu -fpic -fPIC
-freg-struct-retu -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

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

ادامه دارد . . .

برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : محمد رضا جوادیان programers بازدید : 122 تاريخ : يکشنبه 23 اسفند 1394 ساعت: 16:33