본문 바로가기

프로그래밍

visual studio 2008 컴파일러 옵션

C/C++ 컴파일러 옵션

--------------------[최적화]------------------------------------------------------

/O1    공간을 최소화합니다.                      
/O2    속도를 최대화합니다.
/Ob<n> 인라인 확장 (기본값 n=0)          
/Od    최적화를 사용하지 않습니다(기본값).
/Og    전역 최적화를 사용합니다.             
/Oi[-] 내장 함수를 사용합니다.
/Os     코드 공간을 우선 고려합니다.        
/Ot     코드 속도를 우선 고려합니다.
/Ox     최적화를 최대화합니다.                  
/Oy[-] 프레임 포인터를 생략합니다.

--------------------[코드생성]----------------------------------------------------

/GF      읽기 전용 문자열 풀링을 사용합니다.      
/Gm[-] 최소 다시 빌드를 사용합니다.
/Gy[-]  링커 분리 함수를 사용합니다.               
/GS[-]  보안 검사를 사용합니다.
/GR[-]  C++ RTTI를 사용합니다.           
/GX[-]  C++ EH를 사용합니다(/EHsc와 동일).
/EHs     C++ EH를 사용합니다(SEH 예외 제외).  
/EHa     C++ EH를 사용합니다(SEH 예외 포함).
/EHc extern "C" 기본값을 nothrow로 설정합니다.
/fp:<except[-]|fast|precise|strict> 부동 소수점 모델 선택:
     except[-] - 코드 생성 시 부동 소수점 예외를 고려합니다.
     fast - "fast" 부동 소수점 모델입니다. 결과를 예측하기 힘듭니다.
     precise - "precise" 부동 소수점 모델입니다. 결과를 예측할 수 있습니다.
     strict - "strict" 부동 소수점 모델(/fp:except를 의미)

/Qfast  _transcendentals는 /fp:except가 있더라도 인라인 FP 내장을 생성합니다.
/GL[-]   링크 타임 코드 생성을 사용합니다.
/GA     Windows 응용 프로그램에 맞게 최적화합니다.
/Ge       모든 함수에 대해 스택 검사를 수행합니다.
/Gs[num] 스택 검사 호출을 제어합니다.  
/Gh       _penter 함수 호출을 사용합니다.
/GH      _pexit 함수 호출을 사용합니다.      
/GT      파이버 안전 TLS 액세스를 생성합니다.
/RTC1 빠른 검사를 사용합니다(/RTCsu).   
/RTCc 작은 형식 검사로 변환합니다.
/RTCs 스택 프레임 런타임 검사를 수행합니다.
/RTCu 초기화되지 않은 지역 변수가 사용되는지 검사합니다.
/clr[:option] 공용 언어 런타임에 대해 컴파일합니다. 옵션:
      pure - IL 전용 출력 파일을 생성합니다(네이티브 실행 코드 제외).
      safe - 확인할 수 있는 IL 전용 출력 파일을 생성합니다.
      oldSyntax - Visual C++ 2002/2003의 Managed Extensions 구문을 허용합니다.
      initialAppDomain - Visual C++ 2002의 초기 AppDomain 동작을 사용합니다.
      noAssembly - 어셈블리를 생성하지 않습니다.
/Gd    __cdecl 호출 규칙                   
/Gr    __fastcall 호출 규칙
/Gz    __stdcall 호출 규칙                 
/GZ  스택 검사를 사용합니다(/RTCs).
/QIfist[-] ftol() 대신 FIST를 사용합니다.
/hotpatch 핫 패치 가능 이미지에 대한 함수 패딩을 확인합니다.
/arch:<SSE|SSE2> 최소 CPU 아키텍처 요구 사항입니다. 다음 중 하나가 될 수 있습니다.
    SSE - SSE를 사용할 수 있는 CPU의 명령을 사용합니다.
    SSE2 - SSE2를 사용할 수 있는 CPU의 명령을 사용합니다.
/Qimprecise_fwaits "try" 내부가 아니라 "try" 경계에만 FWAIT를 생성합니다.

--------------------[출력파일]-------------------------------------------------------------------------------------

/Fa[file]   어셈블리 목록 파일 이름을 지정합니다.
/FA[scu]  어셈블리 목록을 구성합니다.    
/Fd[file] .PDB 파일 이름을 지정합니다.
/Fe<file> 실행 파일 이름을 지정합니다.  
/Fm[file] 맵 파일 이름을 지정합니다.
/Fo<file> 개체 파일 이름을 지정합니다.  
/Fp<file> 미리 컴파일된 헤더 파일 이름을 지정합니다.
/Fr[file] 소스 브라우저 파일 이름을 지정합니다.
/FR[file] 확장 .SBR 파일 이름을 지정합니다.
/doc[file] XML 문서 주석을 처리하고 선택적으로 .xdc 파일의 이름을 지정합니다
.

--------------------[전처리기]------------------------------------------------------------------------------------

/AI<dir>   어셈블리 검색 경로에 추가합니다.
/FU<file> 어셈블리/모듈을 강제 사용합니다. 
/C 주석을 제거하지 않습니다.            
/D<name>{=|#}<text> 매크로를 정의합니다.
/E    stdout으로 전처리합니다.             
/EP  #line 없이 stdout으로 전처리합니다.
/P    파일로 전처리합니다.                 
/Fx   삽입된 코드를 파일에 병합합니다.
/FI<file> 강제 포함 파일 이름을 지정합니다.
/U<name> 미리 정의된 매크로를 제거합니다.
/u          미리 정의된 모든 매크로를 제거합니다.
/I<dir> 포함 검색 경로에 추가합니다.
/X        "표준 위치"를 무시합니다.           

--------------------[언어]--------------------------------------------------------

/Zi    디버깅 정보를 사용합니다.           
/Z7   이전 스타일 디버그 정보를 사용합니다.
/Zp[n]  n-바이트 경계에서 구조체를 압축합니다.
/Za    확장명을 사용하지 않습니다.         
/Ze    확장명을 사용합니다(기본값).
/Zl     .OBJ에서 기본 라이브러리 이름을 생략합니다.
/Zg     함수 프로토타입을 생성합니다.       
/Zs     구문 검사만 수행합니다.
/vd{0|1|2} vtordisp를 사용하지 않거나 사용합니다.
/vm<x> 멤버에 대한 포인터 형식입니다.   
/Zc:arg1[,arg2] C++ 언어 규칙이며 인수는 다음과 같습니다.
    forScope[-] - 표준 C++ 범위 지정 규칙을 적용합니다.
    wchar_t[-] - wchar_t는 네이티브 형식이며 형식 정의가 아닙니다.
/ZI     편집하며 계속하기 디버그 정보를 사용합니다.
/openmp OpenMP 2.0 언어 확장을 사용합니다.

--------------------[기타]--------------------------------------------------------

@<file> 옵션 지시 파일                  
/?, /help 이 도움말 메시지를 인쇄합니다.
/bigobj 확장 개체 형식을 생성합니다.    
/c 컴파일만 하고 링크는 하지 않습니다.
/errorReport:option Microsoft에 내부 컴파일러 오류를 보고합니다.
    none - 보고서를 보내지 않습니다.    
    prompt - 즉시 보고서를 보낼지 여부를 묻습니다.
    queue - 관리자가 다음에 로그온할 때 보고서를 보낼지 여부를 묻습니다(기본값).
    send - 자동으로 보고서를 보냅니다.  /FC 진단에 전체 경로 이름을 사용합니다.
/H<num> 외부 이름의 최대 길이입니다.    
/J            기본 문자 형식을 unsigned로 지정합니다.
/MP[n]   컴파일하기 위한 프로세스를 'n'개까지 사용합니다.
/nologo    저작권 메시지를 표시하지 않습니다.
/showIncludes 포함 파일의 이름을 표시합니다.
/Tc<source file> 파일을 .c로 컴파일합니다.
/Tp<source file> 파일을 .cpp로 컴파일합니다.
/TC       모든 파일을 .c로 컴파일합니다.      
/TP       모든 파일을 .cpp로 컴파일합니다.
/V<string> 버전 문자열을 설정합니다.    
/w          모든 경고를 사용하지 않습니다.
/wd<n> 경고 n을 사용하지 않습니다.      
/we<n> 경고 n을 오류로 처리합니다.
/wo<n> 경고 n을 한 번 발생시킵니다.     
/w<l><n> n에 대해 경고 수준(1-4)을 설정합니다.
/W<n> 경고 수준을 설정합니다(기본값 n=1).
/Wall    모든 경고를 사용합니다.           
/WL     한 줄 진단을 사용합니다.
/WX    경로를 오류로 처리합니다.           
/Yc[file]   .PCH 파일을 만듭니다.
/Yd          모든 .OBJ에 디버그 정보를 입력합니다.
/Yl[sym]  디버그 라이브러리에 .PCH 참조를 삽입합니다.
/Yu[file]   .PCH 파일을 사용합니다.       
/Y-          모든 PCH 옵션을 사용하지 않습니다.
/Zm<n> 최대 메모리를 할당합니다(기본값의 %).
/Wp64   64비트 이식 경고를 사용합니다.  
 

--------------------[링크]--------------------------------------------------------

/LD     .DLL을 만듭니다.                    
/LDd   .DLL 디버그 라이브러리를 만듭니다.
/LN .netmodule을 만듭니다.             
/F<num> 스택 크기를 설정합니다.
/link [링커 옵션 및 라이브러리]         
/MD     MSVCRT.LIB에 링크합니다.
/MT     LIBCMT.LIB에 링크합니다.            
/MDd   MSVCRTD.LIB 디버그 라이브러리에 링크합니다.
/MTd   LIBCMTD.LIB 디버그 라이브러리에 링크합니다.



출처: http://wewillsoft.com/20090806909