GCC options
TIPs 2008. 9. 7. 21:34-c
어셈블 소스 코드를 컴파일 하지만, 링크하지는 않는다. 기본 출력형태는 '.o'
-S
조립하지 않고, 컴파일 단계 후에 멈춘다. 아웃풋은 어셈블러 코드의 형태. 기본 출력 형태는 '.s'
-E
전처리 작업 후에 멈춘다. 출력은 전처리된 소스코드이고 표준 출력으로 보내진다.
-o file
file로 결과물을 생성한다.
-pipe
컴파일의 여러 단계에서 서로 통신하기 위해 임시 파일을 사용하지 않고 파이프를 사용한다. 어셈블러가 파이프에서 읽을 수 없는 시스템에서는 실패한다.
-ansi
C모드에서는 '-std=c89'와 같고, C++모드에서는 '-std=c++98'과 같다.
이것은 asm이나 typeof 같은 키워드, unix와 vax같은 메크로등과 같이 ISO C90, 표준 C++과 호환되지 않는 특징들을 끈다. 이 옵션을 사용하더라도 __asm__, __extension__, __inline__, __typeof__ 와 같은 키워드나 __unix__, __vax__와 같은 메크로는 여전히 동작 한다. -ansi옵션은 non-ISO프로그램이 근거없이 거부되게 하지는 않는다. 이를 위해 -ansi 옵션이 사용될 때는 -pedantic이 함께 요구된다.
-std=
언어 표준을 결정한다.
`c89'
`iso9899:1990'
모든 ISO C90 프로그램을 지원한다. C에서는 -asni와 같다.
`iso9899:199409'
개정된 ISO C90
`c99'
`c9x'
`iso9899:1999'
`iso9899:199x'
ISO C99. 이 표준은 완전히 지원되지는 않는다.
`gnu89'
C 코드에서의 기본. ISO C90에 대한 GNU 언어.
`gnu99'
`gnu9x'
C99에 대한 GNU 언어. ISO C99가 완전히 구현되면 이것이 기본이 될 것임.
`c++98'
1998 ISO C++ 표준. C++ 코드에서는 -asni와 같다.
`gnu++98'
-std=c++98에 대한 GNU언어. C++코드에서의 기본.
`c++0x'
ISO C++0x표준에 대한 드래프트. 시험적인 특성을 포함하고 있다.
`gnu++0x'
-std=c++0x에 대한 GNU 언어. 시험적인 특성 포함.
-fno-builtin
-fno-builtin-function
-O
-O1
컴파일 시간에 크게 영향을 미치지 않는 범위 내에서 코드의 크기와 실행시간을 줄이려고 한다.
-O 옵션은 다음의 최적화 플래그를 활성화 시킨다.
-fauto-inc-dec
-fcprop-registers
-fdce
-fdefer-pop
-fdelayed-branch
-fdse
-fguess-branch-probability
-fif-conversion2
-fif-conversion
-finline-small-functions
-fipa-pure-const
-fipa-reference
-fmerge-constants
-fsplit-wide-types
-ftree-ccp
-ftree-ch
-ftree-copyrename
-ftree-dce
-ftree-dominator-opts
-ftree-dse
-ftree-fre
-ftree-sra
-ftree-ter
-funit-at-a-time
-fomit-frame-pointer (이것을 활성화 시켰을때 디버깅에 영향을 미치지 않는 머신에서 활성화)
-O2
시간-공간 트레이드 오프를 수반하지 않는 최적화를 수행한다. 컴파일러는 -O2를 지정하지 않는 이상 루프 펼치기나 함수 인라인화를 수행하지 않는다. -O 옵션과 비교해서 코드를 생성하는데 걸리는 컴파일 시간과, 퍼포먼스를 모두 증가 시킨다.
-O2 옵션은 -O에 의해 활성화되는 플래그에 더하여 다음의 최적화 플래그를 활성화 시킨다.
-fthread-jumps
-falign-functions -falign-jumps
-falign-loops -falign-labels
-fcaller-saves
-fcrossjumping
-fcse-follow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks
-fexpensive-optimizations
-fgcse -fgcse-lm
-foptimize-sibling-calls
-fpeephole2
-fregmove
-freorder-blocks -freorder-functions
-frerun-cse-after-loop
-fsched-interblock -fsched-spec
-fschedule-insns -fschedule-insns2
-fstrict-aliasing -fstrict-overflow
-ftree-pre
-ftree-vrp
-O3
더 많은 최적화를 수행한다.
-O2에 의해 활성화되는 플래그에 더하여 다음의 최적화 플래그를 활성화 시킨다.
-finline-functions
-funswitch-loops
-fpredictive-commoning
-fgcse-after-reload
-ftree-vectorize
-O0
기본값. 컴파일 시간을 줄이고, make debugging produce the expected results.
-Os
코드 크기에 최적화. -Os는 코드 크기를 증가시키지 않는 모든 -O2옵션을 가능하게 한다.
-Os 옵션은 다음의 최적화 플래그를 비활성화 시킨다.
-falign-functions -falign-jumps -falign-loops
-falign-labels -freorder-blocks -freorder-blocks-and-partition
-fprefetch-loop-arrays -ftree-vect-loop-version
-fflag 형태의 옵션은 기계 독립적인 플래그를 명시한다. 대부분의 플래그는 +와 -의 형태를 갖는다. -ffoo의 반대 형태는 -fno-foo일 것이다. 다음의 리스트 에서 -no를 붙이거나 빼서 다른 형태를 알 수 있을 것이다.
-fomit-frame-pointer
이것을 필요로 하지 않는 함수에서 레지스터에 프레임 포인터를 저장하고 있지 않는다. 이것은 프레임 포인터를 저장, 셋업, 복구하는 명령어를 사용하지 않게 해 주며, 여분의 레지스터를 많은 함수에서 사용 가능하게 해 준다. 이것은 어떤 기기에서는 디버깅을 불가능하게 한다.