1. 링크 옵션
옵션 | 설명 |
-lname | 링크할 때 name인 lib를 찾음 |
-nodefaultlibs | 링크할 때 표준 시스템 lib를 사용하지 않음 |
-nostartfiles | 링크할 때 표준 시스템 startup 파일을 사용하지 않음 |
-nostdlib | 링크할 때 표준 시스템 startup과 lib를 사용하지 않는다 |
-s | 완성된 바이너리에서 모든 심볼 테이블과 재배치 정보를 제거 |
-shared | 공유 오브젝트를 생성 (다른 오브젝트와 링크하여 실행 파일을 생성할 수 있음) |
-shared-libgcc | libgcc의 공유 라이브러리 버전을 강제로 지정해서 사용 |
-static | 정적 라이브러리를 이용하여 링크 |
-static-libgcc | libgcc의 정적 라이브러리 버전을 강제로 지정 |
-u sym | 심볼 sym이 정의되어 있지 않은 것처럼 동작해서, 심볼 sym을 정의한 라이브러리 모듈과 강제로 링크 |
-WI, opt | 링크 옵션으로 opt를 전달 |
-Xlinker opt | 링크 옵션으로 opt를 전달 |
2. 경고 옵션
옵션 | 설명 |
-fsyntax-only | 코드를 컴파일 하지 않고 문법 검사만 함 |
-pedantic | ISO표준에서 요구되는 모든 경고 메시지를 설정, 다른 종류의 기능을 받아들이지 않는다 |
-pedantic-errors | -pedantic 옵션에 의해서 발생한 경고 메시지를 에러로 변환, 컴파일을 멈춤 |
-w | 모든 경고 메시지를 출력되지 않도록 함 |
-W | 특정 상황에서 추가적인 경고 메시지를 출력 |
-Wall | 모든 경고를 켠다 |
-Wbad-function-cast | 함수 호출이 호환되지 않는 형으로 변환될 때 까지 경고 메시지를 출력(C 전용) |
-Wcast-qual | 형 변환이 형 수식어를 없앨 때 경고 출력 (const char* -> char*) |
-Wchar-subscripts | Char 형 변수가 배열 첨자로 사용될 때 경고 출력 |
-Wcomment | 중첩된 주석이 있을 때 경고 출력 |
-Wconversion | 음수 정수형 상수가 부호 없는 정수형에 대입될 때 경고 출력 |
-Wdisabled-optimization | 사용자가 요구한 최적화가 이루어지지 않았을 때 경고 출력 |
-Werror | 모든 경고를 에러로 변환해서 컴파일을 멈추게 함 |
-Werror-implicit-function-declaration | 함수가 처음으로 사용되기 전에 명시적으로 선언되지 않았을 때 에러 출력 |
-Wfloat-equal | 부동 소수점 값이 등호로 비교되었을 때 경고 출력 |
-Wformat | printf()함수 계열에 입력된 인자가 주어진 형식 문자열과 맞지 않을 때 경고 출력 |
-Wformat-security | printf()함수 계열에 입력된 인자에 대해 잠재적인 보안 문제가 있을 때 경고 출력 |
-Wimplicit | -Wimplicit-int + -Wimplicite-function-declaration |
-Wimplicit-int | 선언에서 형을 지정하지 않았을 때 경고 출력 |
-Wimplicite-function-declaration | 함수가 처음으로 사용되기 전에 명시적으로 선언되지 않았을 때 경고 출력 |
-Winline | Inline으로 선언된 함수가 인라인되지 않았을 때 경고 출력 |
-Wlarger-than-n | 오브젝트 파일의 크기가 n 바이트보다 클 때 경고 출력 |
-Wmain | main() 의 반환형이나 선언이 잘못되었을 때 경고 출력 |
-Wmissing-braces | 집합체나 공용체의 초기화에서 괄호가 잘못된 경우 경고 출력 |
-Wmissing-declarations | 전역 변수가 선언되지 않고 사용되었을 때 경고 출력 |
-Wnested-externs | extern 선언이 함수 선언 안에 있을 때 경고 출력 |
-Wno-deprecated-declarations | 더 이상 쓰이지 않는 기능을 사용한 것에 대해 경고를 출력하지 않음 |
-Wno-div-by-zero | 0으로 나눗셈하더라도 경고를 출력하지 않음 |
-Wno-format-y2k | 2자리 연도를 출력하는 strftime() 형식에 대한 경고를 출력하지 않음 |
-Wno-format-extra-args | printf() 함수 계열에 입력된 여분의 인자에 대해 경고를 출력하지 않음 |
-Wni-long-long | Long long형을 사용하는 것에 대해 경고를 출럭하지 않음 |
-Wno-multichar | 멀티 바이트 문자를 사용한 것에 대해 경고를 출력하지 않음 |
-Wpadded | 구조체가 정렬을 위해 패딩 될 때 경고 출력 |
-Wparentheses | 잘못된 괄호에 대한 경고 메시지 출력 |
-Wpoint-arith | 코드 수행이나 구조체가 함수 형이나 void 포인터의 크기에 의존적일 경고 출력 |
-Wredundant-decls | 오브젝트가 유효 범위 안에서 여러 번 선언되거나, 유효 범위 밖에서 사용되었을 때 경고 출력 |
-Wreturn-type | 함수의 반환형이 지정되지 않았거나 값을 반환하는데 void로 선언된 경우 경고 출력 |
-Wsequence-point | C sequence point rule을 위반하는 코드에 대해 경고 출력 |
-Wshadow | 지역변수가 다른 지역변수, 매개변수, 내장함수를 ovrride할 때 경고 출력 |
-Wsign-compare | 부호가 있는 값과 부호가 없는 값 비교 시, 형변환 때문에 잘못된 값이 나올 때 경고 출력 |
-Wstrict-prototypes | 함수가 인자 형을 지정하지 않은 채 선언, 정의되었을 때 경고 출력 |
-Wswitch | Switch 구문에서 모든 경우의 값을 다루지 않을 때 경고 출력 |
-Wsystem-headers | 시스템 헤더 파일의 코드에 대한 경고를 출력 |
-Wtraditional | ISO표준과 traditional c에서 다르게 동작하거나 없는 코드를 사용했을 때 경고 출력 |
-Wtrigraphs | 주석 영역의 바깥 부분에 3중문자가 있을 때 경고 출력 ex) ??= -> # |
-Wundef | 정의되지 않은 식별자가 #if…#endif 구분에서 사용되었을 때 경고 출력 |
-Wuninitialized | 자동 변수가 초기화되지 않고 사용되었을 때 경고 출력 |
-Wunknown-pragmas | GCC가 익식하지 못하는 #pragma가 사용되었을 때 경고 출력 |
-Wunreachagle-code | 실행되지 않은 코드에 대해 경고를 출력 |
-Wunused | -Wunused 류의 옵션을 모두 켠다 |
-Wunused-function | 선언은 되어 있으나 사용되지 않은 함수에 대해 경고를 출력 |
-Wunused-parameter | 선언은 되어 있으나 사용되지 않은 parameter에 대해 경고를 출력 |
-Wunused-value | 선언은 되어 있으나 사용되지 않은 계산 결과에 대해 경고를 출력 |
-Wunused-variable | 선언은 되어 있으나 사용되지 않은 변수에 대해 경고를 출력 |
3. 디버깅 옵션
옵션 | 설명 |
-d [mod] | 컴파일 지점 mod에서 디버깅 정보 덤프를 생성 |
-fdump-class-hierarchy [-option] | 각 클래스의 계층 구성과 가상 함수 테이블을 파일로 덤프 |
-fdump-translation-unit [-option] | 전체 변환에 대한 트리 구조 표현을 파일로 덤프 |
-fdump-tree [-switch[-option]] | 여러가지 처리 단계에서 중간 언어 트리를 파일로 덤프 |
-fdump-unnumbered | 디버깅 정보를 덤프 할 때에 줄 정보와 명령어 숫자를 포함하지 않음 |
-fmem-report | 각 컴파일 단계에서 메모리 할당에 관한 통계를 표시 |
-fpretend-float | 타겟 시스템이 호스트 시스템과 같은 부동 소수점 형식을 가진다고 가정함 |
-fprofile-arcs | profile 프로그램을 삽입한다. ex) test.c -> test.c.du |
-ftest-coverage | 커버리지 테스트 프로그램임 gcov에서 사용하는 데이터를 생성 |
-ftime-report | 각 컴파일 단계에 대한 성능 통계를 표시 |
-g [n] | 시스템 디버깅 형식으로 n 단계 디버깅 정보를 생성 (출력할 정보 양을 지정하기 위해서) |
-gcoff [n] | COFF형식으로 n 단계 디버깅 정보를 생성 |
-gdwarf | DWARF 형식으로 디버깅 정보를 생성 |
-gdwarf+ | GDB에서 쓰이는 확장을 이용해서 DWARF 형식으로 디버깅 정보를 생성 |
-gdwarf-2 | DWARF 버전 2형식으로 디버깅 정보를 생성 |
-ggdb [n] | GDB에서만 사용할 수 잇는 디버깅 정보를 생성 |
-gstabs [n] | STABS 형식으로 n 단계 디버깅 정보를 생성 |
-gstabs+ | GDB에서 쓰이는 확장을 이용해서 STABS형식으로 디버깅 정보를 생성 |
-gvms [n] | VMS 형식으로 n단계 디버깅 정보를 생성 |
-gxcoff [n] | XCOFF형식으로 n 단계 디버깅 정보를 생성 |
-gxcoff+ | GDB에서 쓰이는 확장을 이용해서 XCOFF형식으로 디버깅 정보를 생성 |
-p | prof 프로그램에서 사용하는 profiling정보를 덤프하는 추가적인 코드 생성 |
-pg | gprof 프로그램에서 사용하는 profiling정보를 덤프하는 추가적인 코드 생성 |
-Q | 컴파일 되는 각각의 함수 이름과 각 컴파일 단계가 얼마나 오래 걸렸는지 표시 |
-time | 컴파일 단계 각각에서 CPU시간이 얼마나 쓰였는지 표시 |
4. 최적화 옵션
옵션 | 설명 |
-O | -O1과 같음 |
-O0 (숫자 0) | 최적화를 하지 않음 |
-O1 | 코드사이즈의 감소와 실행속도향상을 목표로 최적화함,변수를 레지스터에 할당하거나,다중조건점프의 최적화 등을 행함 |
-O2 | 고도의 최적화를 하며, 대부분이 최적화가 됨. 루프전개와 함수의 인라인전개,레지스터의 rename을 하지않음. |
-O3 | -O2 것보다 진보된 최적화를 행함. 루프전개나 함수의 인라인 전개등도 행함. |
-Os | 코드사이즈를 작게 하기 위한 최적화를 행함. -O0∼3등의 실행 속도를 향상시키는 옵션을 모두 병행할 수 있음. |
5. i386 / AMD x86-64 옵션
옵션 | 설명 |
-mtune=cpu-type | cpu-type에 최적화된 바이너리를 생성 |
-march=cpu-type | 지정한 cpu-type을 위한 명령어를 생성 (-mcpu=CPU-type을 포함) |
-mfpmath=unit | 부동 소수점 유닛 unit에 맞는 부동 소수점 연산을 생성(unit:387,sse) |
-masm=dialect | dialect를 사용해서 asm 명령어를 출력 |
-mno-fancy-math-387 | GCC가 387에 대한 sin, cos, sqrt 명령어를 생성하지 않게 됨 |
-mno-fp-ret-in-387 | GCC는 값을 반환할 때, 일반적인 CPU 레지스터를 사용해서 반환 |
-msoft-float | 부동 소수점 연산에 대해 라이브러리 호출을 담고 있는 출력을 생성 |
-maccumulate-outgoing-args | 함수 도입부에서 인자가 필요한 공간의 최대 크기 계산(-mpush-args 포함) |
-m128bit-long-double | Long double을 저장하는데 128비트를 사용함 |
-malign-double | double, long double, long long 변수를 2워드 경계로 정렬 |
-mpreferred-stack-boundary=num | 스택 경계를 2의 num승 바이트 경계로 정렬 시스템에 따라 필요한 경계 값이 다름 |
-msahf | GCC가 64 bit로 생성된 SAHF 명령을 사용 할 수 있도록 함 |
-mrecip | RCPSS와 RSQRTSS 명령을 사용 할 수 있도록 함 |
-mmmx | MMX 확장 명령어에 대한 직접적인 접근을 가능하게 해주는 내장 함수를 사용 가능 |
-msse | SEE 확장 명령어에 대한 직접적인 접근을 가능하게 해주는 내장함수를 사용 가능 |
-mrtd | 고정된 개수의 인자를 받는 함수가 num명령어와 함께 반환되어 반환 도중에 인자를 꺼내는 함수 호출 방식을 사용 할 수 있음 |
-m96bit-long-double | Long double을 저장하는데 96비트를 사용함 |
-mregparm=num | 정수형 인자를 전달하는데 사용하는 레지스터의 개수를 조정할 수 있음 |
-m3dnow | 3Dnow 확장 명령어에 직접 접근이 가능하게 해주는 내장함수 사용 가능 |
-mcpu=CPU-type | 지정한 CPU-type을 위해 만들어진 코드를 조정 |
-momit-leaf-frame-pointer | 리프 함수를 위한 레지스터에서 프레임 포인터를 유지하지 않음 |
-mthreads | Mingw32 플랫폼에서 thread safe exception처리를 지원 |
-mno-align-stringops | 인라인된 문자열 연산의 목표 지점을 정렬하지 않음 |
-minline-all-stringops | 모든 문자연 연산을 인라인 함, 코드 사이즈는 커지지만 작은 길이의 문자열의 경우 성능 향상 |
-mpush-args | 매개변수를 저장하는데 PUSH 연산을 사용 |
-mno-tls-direct-seg-refs | TLS 변수에 대한 컨트롤 |
-mstackrealign | Runtime stack을 재정렬 |