본문 바로가기
컴퓨터

[Visual Studio] C++ 컴파일 옵션

by Luyin 2013. 6. 14.

[C/C++] - [일반]


- 최소 다시 빌드 가능 : 변경된 소스 파일만 컴파일하고 리빌드 한다.

(아니요) /Gm - : 변경되지 않은 소스파일 까지 리빌드 한다.

(예) / Gm : 변경된 소스파일만 리빌드 한다.


- C++ 예외 처리 가능 : 컴파일러가 사용하는 예외 처리 모델을 지정한다.

(예, SEH 예외 있음) /EHa : 생성자, 의도적 예외발생 전

(예) /EHsc : 생성자, 의도적 예외발생 전, 프로그램 종료 됨

(예, Extern C 함수 있음) /EHs : 생성자, 의도적 예외발생 전, 프로그램 종료됨

(아니요) : 생성자, 의도적 예외발생 전, 예외발생, 계속 진행


  예외 처리 동작 위치

class Foo
{
public :
		Foo()
		{
			printf("생성자\n");
		}
		virtual ~Foo()
		{
			printf("소멸자\n");
			int* a = 0;
			*a = 1;
			printf("소멸자 예외\n");
		}
};

void bar()
{
	try{
		Foo foo;
		printf("의도적 예외발생 전\n");
		int * a= 0;
		*a = 1;
		printf("의도적 예외발생 후\n");
	}catch(...)
	{
		printf("예외 발생\n");
	}
	printf("계속 진행\n");
}


- 디버그 정보 형식 : Debug모드로 컴파일 할시에 생성되는 디버그 정보 형식을 지정합니다. 디버그 정보 형식이 개체 파일(.obj)에 저장될지 아니면 프로그램 데이터베이스(PDB)에 저장될지의 여부를 선택합니다.


 

Visual Studio 디버그 컴파일 모드.


디버그 모드 중에는 .exe파일이나 DLL에 대한 디버깅 정보를 만들 수 있습니다.

링커에서는 PDB(프록램 데이터베이스)에 디버깅 정보를 보관하고, 해당 프로그램의 후속 빌드 과정에서 이 PDB를 업데이트 합니다.

디버깅을 위해 만든 .exe 파일이나 DLL에는 해당 PDB의 이름과 경로가 포함됩니다. 프로그램을 디버깅하면 디버거에서는 이 포함된 이름을 읽고 PDB를 사용합니다. 링커에서는 프로그램의 기본 이름과 확장명 .pdb를 사용하여 프로그램 데이터베이스의 이름을 지정하고 프로그램 데이터베이스의 생성 경로를 포함 시킵니다. 


(없음)

C7 호환 (/Z7) : 디버깅 정보가 담긴 .obj 파일을 생성한다. 디버깅 정보에는 함수와 줄 번호, 변수 이름과 형식이 포함되어 있다. /Gm(최소 다시 빌드 사용) 과 함께 사용할 수 없다.

프로그램 데이터베이스 (/Zi) : 디버깅 정보가 담긴 프로그램 데이터베이스(PDB)를 생성합니다. 디버깅 정보에는 함수와 줄 번호, 변수 이름과 형식이 포함되어 있다. /Gm(최소 다시 빌드 사용) 과 함께 사용할 수 있다.

편집하며 계속하기 프로그램 데이터베이스 (/ZI) : 말그대로 편집하며 계속 하기 기능을 지원하는 형식으로 프로그램 데이터베이스(PDB)를 생성한다. 컴파일에 /Gy(함수 수준 링크 사용)가 사용된다.

/clr(공용 언어 런타임 컴파일) 과 함께 사용될 수 없다. x86에서만 지원 된다.