본문 바로가기

C 언어/임베디드 C

gcc, cl 옵션


 

gcc 옵션


컴파일 단계 순서

소스 *.c ㅡ전처리ㅡ> *.i ㅡ컴파일ㅡ> *.s ㅡ어셈블리ㅡ> *.o ,obj ㅡ링크, 링킹ㅡ>*exe


gcc는 cpp0(C PreProcesser)를 호출하여 전처리 과정을 거쳐 like.c 파일을 like.i 파일로 만든다. like.i 파일은 C 컴파일러인 cc1에 의하여 어셈블리 코드인 like.s로 컴파일되고 이후 like.s는 as 어셈블러에 의해 어셈블 과정을 거쳐 like.o 오브젝트 파일로 만들어진다.

like.o 파일은 다시 링크인 collect2가 libc.a와 같은 표준 C 라이브러리와 링크하여 최종적으로 실행 파일인 like 파일을 만들게 된다. gcc에 의한 C 소스 컴파일 과정은 크게 이와 같은 방식으로 이루어진다. 만약 like.c가 C 소스가 아니라 like.cc와 같이 C++ 소스였다면 cpp0에 의해 생성되는 전처리 과정 파일이 like.i가 아니라 like.ii이고 cc1 C 컴파일러 대신 cc1plus C++ 컴파일러가 사용되게 된다.



-E 전처리 과정 화면에 출력

-S 어셈블리 파일 생성

-c 오브젝트 파일 생성

-v 컴파일 과정 화면에 출력

--save-temps 컴파일시 생성되는 중간 파일 저장

-da 컴파일 과정에서 생성되는 중간 코드 생성(RTL파일 등 생성)


cl 옵션


cl /P i파일 생성

cl /C obg파일 생성

cl /Fa s asm파일 생성


최적화


옵션 용도

/O1 작은 코드를 만듭니다.

/O2 빠른 코드를 만듭니다.

/Oa 별칭 없음으로 가정합니다.

/Ob 인라인 확장을 제어합니다.

/Od 최적화를 사용하지 않습니다.

/Og 전역 최적화를 사용합니다.

/Oi 내장 함수를 생성합니다.

/Op 부동 소수점 일치를 향상시킵니다.

/Os 코드 크기를 우선으로 합니다.

/Ot 코드 속도를 우선으로 합니다.

/Ow 함수 호출에 별칭을 가정합니다.

/Ox 최대 최적화(/Ob1gity /Gs)를 사용합니다.

/Oy 프레임 포인터를 생략합니다.


코드 생성


옵션 용도

/arch 코드 생성 시 SSE 또는 SSE2 명령을 사용합니다.

/clr Managed Extensions for C++를 사용하고 공용 언어 런타임에서 실행할 출력 파일을 생성합니다.

/EH 예외 처리 모델을 지정합니다.

/G3 386 프로세서에 맞게 코드를 최적화합니다. Visual C++ 5.0에서 사용하면 컴파일러가 이 옵션을 무시합니다.

/G4 486 프로세서에 맞게 코드를 최적화합니다. Visual C++ 5.0에서 사용하면 컴파일러가 이 옵션을 무시합니다.

/G5 Pentium에 맞게 코드를 최적화합니다.

/G6 Pentium Pro, Pentium II 및 Pentium III 프로세서에 맞게 코드를 최적화합니다.

/G7 Pentium 4 또는 Athlon 프로세서에 맞게 코드를 최적화합니다.

/GB /G6와 동일하며 _M_IX86 값을 600으로 설정합니다.

/Gd __cdecl 호출 규칙을 사용합니다.

/Ge 스택 조사를 활성화합니다.

/GF

/Gf 문자열 풀링을 사용합니다.

/Gh 후크 함수 _penter를 호출합니다.

/GH 후크 함수 _pexit을 호출합니다.

/GL 전체 프로그램 최적화를 사용합니다.

/Gm 최소 재빌드를 사용합니다.

/GR RTTI(런타임 형식 정보)를 사용합니다.

/Gr __fastcall 호출 규칙을 사용합니다.

/Gs 스택 조사를 제어합니다.

/GT 정적 스레드 로컬 저장소를 사용하여 할당한 데이터의 파이버 안전을 지원합니다.

/GX 동기 예외 처리를 사용합니다.

/Gy 함수 수준 링크를 사용합니다.

/Gz __stdcall 호출 규칙을 사용합니다.

/MD MSVCRT.lib를 사용하여 다중 스레드 DLL을 만듭니다.

/MDd MSVCRTD.lib를 사용하여 디버그 다중 스레드 DLL을 만듭니다.

/ML LIBC.lib를 사용하여 단일 스레드 실행 파일을 만듭니다.

/MLd LIBCD.lib를 사용하여 디버그 단일 스레드 실행 파일을 만듭니다.

/MT LIBCMT.lib를 사용하여 다중 스레드 실행 파일을 만듭니다.

/MTd LIBCMTD.lib를 사용하여 디버그 다중 스레드 실행 파일을 만듭니다.


출력 파일


옵션 용도

/FA

/Fa 목록 파일을 만들고

목록 파일 이름을 설정합니다.

/Fd 프로그램 데이터베이스 파일 이름을 바꿉니다.

/Fe 실행 파일 이름을 바꿉니다.

/Fm 맵파일을 만듭니다.

/Fo 개체 파일을 만듭니다.

/Fp 미리 컴파일된 헤더 파일 이름을 지정합니다.

/FR

/Fr 브라우저 파일을 생성합니다.

/Fx 삽입된 코드와 소스 파일을 병합합니다.


디버깅


옵션 용도

/GS 보안 검사를 버퍼링합니다.

/GZ /RTC1과 동일합니다.

/RTC 런타임 오류 검사를 사용합니다.

/Wp64 64비트 이식성 문제를 검색합니다.

/Yd 모든 개체 파일에 완전한 디버깅 정보를 저장합니다.

/Yl 디버그 라이브러리를 만들 때 PCH 참조를 삽입합니다.

/Z7 C 7.0 호환 디버깅 정보를 생성합니다.

/Zd 줄 번호를 생성합니다.

/Zi 완전한 디버깅 정보를 생성합니다.


전처리기


옵션 용도

/AI #using 지시문에 전달된 파일 참조를 확인하기 위해 검색할 디렉터리를 지정합니다.

/C 전처리하는 동안 주석을 유지합니다.

/D 상수와 매크로를 정의합니다.

/E 전처리기 출력을 표준 출력에 복사합니다.

/EP 전처리기 출력을 표준 출력에 복사합니다.

/FI 지정된 포함 파일을 전처리합니다.

/FU 파일 이름이 #using 지시문에 전달된 것처럼 사용되도록 합니다.

/I 포함 파일의 디렉터리를 검색합니다.

/P 전처리기 출력을 파일에 씁니다.

/U 미리 정의된 매크로를 제거합니다.

/u 미리 정의된 모든 매크로를 제거합니다.

/X 표준 포함 디렉터리를 무시합니다.

/ZI 편집하며 계속하기와 호환되는 프로그램 데이터베이스에 디버깅 정보를 포함합니다.


언어


옵션 용도

/vd 숨겨진 vtordisp 클래스 멤버를 사용하거나 사용하지 않습니다.

/vmb 멤버의 포인터에 best case를 사용합니다.

/vmg 멤버의 포인터에 full generality를 사용합니다.

/vmm 다중 상속을 선언합니다.

/vms 단일 상속을 선언합니다.

/vmv 가상 상속을 선언합니다.

/Za 언어 확장을 사용하지 않습니다.

/Zc /Ze에서 표준 동작을 지정합니다.

/Ze 언어 확장을 사용합니다.

/Zg 함수 프로토타입을 생성합니다.

/Zl .obj 파일에서 기본 라이브러리 이름을 제거합니다.

/Zpn 구조체 멤버를 넣습니다.

/Zs 구문만 확인합니다.


링크


옵션 용도

/F 스택 크기를 설정합니다.

/LD DLL(동적 연결 라이브러리)을 만듭니다.

/LDd 디버그 DLL(동적 연결 라이브러리)을 만듭니다.

/link 지정된 옵션을 LINK에 전달합니다.

/MD MSVCRT.lib을 사용하여 컴파일함으로써 다중 스레드 DLL을 만듭니다.

/MDd MSVCRTD.lib로 컴파일하여 디버그 다중 스레드 DLL을 만듭니다.

/ML LIBC.lib를 사용하여 컴파일함으로써 단일 스레드 실행 파일을 만듭니다.

/MLd LIBCD.lib를 사용하여 컴파일함으로써 디버그 단일 스레드 실행 파일을 만듭니다.

/MT LIBCMT.lib를 사용하여 컴파일함으로써 다중 스레드 실행 파일을 만듭니다.

/MTd LIBCMTD.lib를 사용하여 컴파일함으로써 디버그 다중 스레드 실행 파일을 만듭니다.


미리 컴파일된 헤더


옵션 용도

/Y- 현재 빌드에서 미리 컴파일된 다른 모든 헤더 컴파일러 옵션을 무시합니다.

/Yc 미리 컴파일된 헤더 파일을 만듭니다.

/Yd 모든 개체 파일에 완전한 디버깅 정보를 저장합니다.

/Yu 빌드하는 동안 미리 컴파일된 헤더 파일을 사용합니다.

/YX 미리 컴파일된 헤더를 자동화합니다.


기타


옵션 용도

@ 지시 파일을 지정합니다.

/? 컴파일러 옵션을 나열합니다.

/c 링크하지 않고 컴파일합니다.

/H 외부 공개 이름의 길이를 제한합니다.

/HELP 컴파일러 옵션을 나열합니다.

/J 기본 char 형식을 변경합니다.

/nologo 초기 화면 배너를 표시하지 않습니다.

/QI0f Pentium 0F 명령에 문제가 없도록 합니다.

/QIfdiv 결함이 있는 FDIV, FPREM, FPTAN 및 FPATAN 명령을 가진 Intel Pentium 마이크로프로세서 문제를 해결합니다.

/QIfist 부동 소수점 형식에서 정수 계열 형식으로 변환해야 할 때 도우미 함수 _ftol가 호출되지 않도록 합니다.

/showIncludes 컴파일하는 동안 전체 포함 파일의 목록을 표시합니다.

/Tc

/TC C 소스 파일을 지정합니다.

/Tp

/TP C++ 소스 파일을 지정합니다.

/V 버전 문자열을 설정합니다.

/W 경고 수준을 설정합니다.

/w 모든 경고를 사용하지 않습니다.

/Wall 기본적으로 비활성화되는 경고를 포함하여 모든 경고를 활성화합니다.

/WL 명령줄에서 C++ 소스 코드를 컴파일할 때 오류 및 경고 메시지에 한 줄 진단을 사용합니다.

/Zm 미리 컴파일된 헤더 메모리의 할당 제한을 지정합니다.


'C 언어 > 임베디드 C' 카테고리의 다른 글

플로우차트(흐름도)  (0) 2011.04.04
if문  (0) 2011.04.04
확장문자(escape sequence)  (0) 2011.03.30
ASCII(아스키 코드)  (0) 2011.03.30
실수 저장방식  (0) 2011.03.29