본문 바로가기

Programming/MFC

MFC 프로젝트 속성 > 구성 속성

출처 : http://blog.naver.com/chollikyo/10166698586


일반     

 

입력 디렉터리 : 링커와 같은 도구에서 빌드 프로세스 중에 만들어진 모든 최종 출력 파일을 배치할 디렉터리를 지정


중간 디렉터리 : 컴파일러와 같은 같은 도구에서 빌드 프로세스 중에 만들어진 모든 중간 파일을 배치할 디렉터리를 지정


대상 이름 : 이 프로젝트가 생성하는 파일 이름을 지정

 

매크로

설명

$(SolutionDir)솔루션의 디렉터리(드라이브+경로). 이 경로에는 뒤에 \를 붙여야 함.
$(Configuration)현재 프로젝트 구성의 이름(예: "Debug")
$(ProjectName)프로젝트의 기본 이름.
$(RemoteMachine)디버그 속성 페이지에서 Remote Machine 속성의 값으로 설정.
$(Platform)현재 프로젝트 플랫폼의 이름(예: "Win32")
$(RootNameSpace)응용 프로그램을 포함하는 네임스페이스(있을 경우)
$(IntDir)중간 파일에 지정된 디렉터리 경로. 프로젝트 디렉터리에 대해 상대적인 경로. 
이 경로에는 뒤에 슬래시가 붙어야 함.
이 경로는 Intermediate Directory 속성의 값이 됨.
$(OutDir)출력 파일 디렉터리의 경로로서 프로젝트 디렉터리에 대해 상대적인 경로.
이 경로에는 뒤에 슬래시가 붙어야 함
이 경로는 Output Directory 속성의 값이 됨
$(DevEnvDir)드라이브와 경로로 정의되는 Visual Studio 2010의 설치 디렉터리로, 
뒤에는 백슬래시(\)가 붙음
$(ProjectDir)프로젝트의 디렉터리(드라이브 + 경로) . 뒤에는 백슬래시(\)가 붙임.
$(ProjectPath)드라이브 + 경로 + 기본 이름 + 파일 확장명으로 정의되는 프로젝트의 절대 경로 이름.
$(ProjectFileName)프로젝트의 파일 이름 (기본 이름 + 파일 확장명)
$(ProjectExt)프로젝트의 파일 확장명. 파일 확장명 앞에는 '.'이 붙음
$(SolutionPath)드라이브 + 경로 + 기본 이름 + 파일 확장명으로 정의되는 솔루션의 절대 경로 이름.
$(SolutionName)솔루션의 기본 이름.
$(SolutionFileName)기본 이름 + 파일 확장명으로 정의되는 솔루션의 파일 이름.
$(SolutionExt)솔루션의 파일 확장명.파일 확장명 앞에는 '.'이 붙음
$(TargetDir)드라이브 + 경로로 정의되는 빌드용 기본 출력 파일의 디렉터리로서 뒤에는 백슬래시(\)가 붙음
$(TargetPath)드라이브 + 경로 + 기본 이름 + 파일 확장명으로 정의되는 빌드용 기본 출력 파일의 절대 경로 이름.
$(TargetName)빌드용 기본 출력 파일의 기본 이름.
$(TargetFileName)기본 이름 + 파일 확장명으로 정의되는 빌드용 기본 출력 파일의 파일 이름.
$(TargetExt)빌드용 기본 출력 파일의 파일 확장명.파일 확장명 앞에는 '.'이 붙습니다.
$(VSInstallDir)Visual Studio 2010을 설치한 디렉터리. 
$(FrameworkDir).NET Framework를 설치한 디렉터리.
$(FrameworkVersion)Visual Studio에서 사용되는 .NET Framework의 버전.$(FrameworkDir)와 함께 사용하면 Visual Studio에서 사용되는 .NET Framework 버전의 전체 경로를 나타남
$(FrameworkSDKDir).NET Framework를 설치한 디렉터리..NET Framework는 Visual Studio 2010과 함께 또는 별도로 설치할 수 있음
$(WebDeployPath)웹 배포 루트에서 프로젝트 출력이 속한 상대 경로. RelativePath와 같은 값을 반환
$(WebDeployRoot)<localhost>의 절대 경로(예: c:\inetpub\wwwroot).
$(FxCopDir)fxcop.cmd 파일의 경로. fxcop.cmd 파일은 모든 Visual C++ 버전에 설치되어 있지는 않음

 

대상 확장명

이 프로젝트가 생성하는 파일 이름 확장명을 지정(예: .exe 또는 .dll).

정리할 때 삭제할 확장명 : 빌드 메뉴의 정리 옵션을 선택하면 프로젝트의 구성이 빌드되는 중간 디렉터리에서 파일이 삭제됨 이 속성으로 지정된 확장명을 가진 파일은 정리를 실행하거나 빌드를 다시 수행할 때 삭제됨. 빌드 시스템에서는 중간 디렉터리에 있는 이 확장명을 가진 파일 외에도 위치에 상관 없이 .obj 파일과 같은 중간 출력을 포함하여 빌드의 알려진 출력을 모두 삭제함. 사용자는 와일드카드 문자를 지정할 수 있음.

 

빌드 로그 파일

프로젝트를 빌드할 때마다 만들어지는 로그 파일에 대해 기본 위치가 아닌 위치를 지정할 수 있음.

 

플랫폼 도구 집합

Visual Studio 2010(v100), Visual Studio 2008(v90)

 

구성 형식

응용 프로그램(.exe)C/C++ 컴파일러, MIDL, 리소스 컴파일러, 링커, BSCMake, XML Web services 프록시 생성기, 사용자 지정 빌드, 빌드 전, 링크 전, 빌드 후 이벤트 등의 링커 도구 세트를 표시.
동적 라이브러리 (.dll)링커 도구 세트를 표시하고, /DLL 링커 옵션을 지정하며, _WINDLL 정의를 CL에 추가함.
메이크파일메이크파일 도구 세트(NMake)를 표시함
정적 라이브러리 (.lib)라이브러리 관리자 도구 세트를 표시함. 이 도구 세트는 링커 대신 라이브러리 관리자를 사용하고 XML Web services 프록시 생성기를 생략한다는 점을 제외하고 링커 도구 세트와 동일함.
유틸리티유틸리트 도구 세트(MIDL, 사용자 지정 빌드, 빌드 전, 빌드 후 이벤트)를 표시함

 

MFC 사용

비MFC 프로젝트에서는 MFC를 사용할 때 표준 Windows 라이브러리 사용을 선택하여 포함된 다양한 Win32 라이브러리에 링크할 수 있음

 

파일 용량

프로그램 로딩 속도

배포시 MFC DLL

정적 라이브러리에서 MFC 사용보통신경쓰지 않아도 됨
공유 DLL에서 MFC 사용작음빠름정확한 MFC DLL 목록을 반드시 함께 배포 (mfc42d.dll, mfco42d.dll, msvcirtd.dll, 
msvcrtd.dll).

프로그램을 개발할 때는 Debug 모드에 "공유 DLL에서 MFC 사용"으로 컴파일해서 사용
개발이 완료된 후에 배포할 때는 Release 모드에 "정적 라이브러리에서 MFC 사용"을 사용해서 컴파일

 

ATL 사용
ATL 프로젝트를 ATL .DLL에 정적으로 링크할지 동적으로 링크할지 여부를 지정합니다. ATL 사용 안 함 이외의 다른 항목을 지정한 경우 컴파일러의 명령줄 속성 페이지에 정의가 추가

 

문자 집합 

 


유니코드 문자 집합  

사용 와이드 문자 형식인 wchar_t. wchar_t[] 배열 및가 가리키는 것은 wchar_t* 포인터. 모든 ASCII 문자열 리터럴은 와이드 문자 문자열 리터럴을 문자 L을 ASCII 리터럴 (예: L "Hello")를 붙임으로써 간단 하 게 나타낼 수 있음

일반적으로 와이드 문자는 멀티 바이트 문자 보다 메모리에서 더 많은 공간을 차지 하지만 프로세스를 빠름 

 

멀티바이트 문자 집합 사용
MBCS(멀티바이트 문자 집합)는 일본어 및 중국어와 같이 싱글바이트로 표현할 수 없는 문자 집합을 지원하기 위해 유니코드 대신 사용

 

공용 언어 런타임 지원

공용 언어 런타임 지원(/clr)
응용 프로그램에 대한 메타데이터를 만듬.  
메타데이터는 다른 CLR 응용 프로그램에서 사용할 수 있으며, 다른 CLR 구성 요소의 메타데이터에 있는 형식과 데이터를 응용 프로그램에서 사용할 수 있도록 함  

 

순수 MSIL 공용 언어 런타임 지원(/clr:pure)
네이티브 실행 코드 없는 유일한 출력 파일인 MSIL(Microsoft Intermediate Language)을 생성
그러나 MSIL로 컴파일된 네이티브 형식을 포함할 수 있음 

 


안전 MSIL 공용 언어 런타임 지원(/clr:safe)
네이티브 실행 코드가 없는 MSIL 전용의 안정성을 확인할 수 있는 출력 파일을 생성 

공용 언어 런타임 지원, 이전 구문(/clr:oldSyntax)
원래의 Visual C++ 구문인 Managed Extensions for C++ 구문을 CLR 프로그래밍에 사용할 수 있게 함.   

Managed Extensions for C++ 구문은 더 이상 사용되지 않음

 

전체 프로그램 최적화
링크 타임 코드 생성 사용
링커에서는 컴파일러를 호출한 후 전체 프로그램 최적화를 수행
 

프로필 기반 최적화
프로필 기반 최적화를 사용하면 출력 파일을 최적화할 수 있음. 
최적화 프로그램에서는 .exe 또는 .dll 파일의 테스트 실행으로 얻은 데이터를 사용

 

디버깅 

 

실행할 디버거  


실행할 디버거를 지정. 
로컬 Windows 디버거, 원격 Windows 디버거, 웹 브라우저 디버거, 웹 서비스 디버거  

 

명령(로컬 Windows 디버거)  
로컬 컴퓨터에서 디버깅하고 있는 프로그램을 시작하는 명령을 지정

 

명령 인수(로컬 Windows 디버거 및 원격 Windows 디버거)  
위에서 지정한 명령의 인수를 지정

   < file파일에서 stdin을 읽음
   > filestdout을 파일에 씀
   >> filestdout을 파일에 추가
   2> filestderr를 파일에 씀
   2>> filestderr를 파일에 추가
   2> &1stderr(2) 출력을 stdout(1)과 동일한 위치로 보냄
   1> &2 stdout(1) 출력을 stderr(2)와 동일한 위치로 보냄

이러한 연산자는 대부분 콘솔 응용 프로그램에만 적용됨

 

작업 디렉터리 
EXE가 있는 프로젝트 디렉터리에 상대적인 디버깅 중인 프로그램의 작업 디렉터리를 지정함.  
이 설정을 비워 두면 프로젝트 디렉터리가 작업 디렉터리가 됨. 

원격 디버깅의 경우 프로젝트 디렉터리는 원격 서버에 있음
 
연결(로컬 Windows 디버거 및 원격 Windows 디버거)  
응용 프로그램을 실행할 것인지 아니면 응용 프로그램에 연결할 것인지 지정함.  기본 설정은 No

 

디버거 형식 
네이티브 전용은 비관리 C++ 코드에 사용
관리 전용은 공용 언어 런타임에서 실행되는 코드(관리 코드)에 사용
혼합은 관리 코드와 비관리 코드 모두에 대해 디버거를 호출  
자동은 컴파일러와 EXE 정보를 기준으로 디버거 형식을 결정
스크립트는 스크립트 디버거를 호출
GPU만 GPU 장치 래스터라이저로 Directx에서 실행 되는 C++ AMP 코드

 

환경(로컬 Windows 디버거)  
디버깅할 프로그램의 환경 변수를 지정

 

환경 병합(로컬 Windows 디버거)  
환경 상자에서 지정한 변수를 운영 체제에 정의된 환경과 병합할지 여부를 결정
 
SQL 디버깅(MPI 클러스터 디버거를 제외한 모든 디버거)  
Visual C++ 응용 프로그램에서 SQL 프로시저를 디버깅할 수 있음


액셀러레이터 키 형식 디버깅 (GPU만 디버깅)  
GPU 디버깅에 사용할 장치를 지정.  호환 GPU 장치의 장치 드라이버를 설치 하면 추가 옵션이 추가 됨.

 

기본 중단점 동작 GPU (GPU만 디버깅)   
SIMD 구부리기에서 각 스레드에 중단점 이벤트를 발생시킬지 여부를 지정.

 

배포 디렉터리 (원격 Windows 디버거)  
프로젝트 출력 복사 전에 실행 될 위치는 원격 컴퓨터의 경로.  원격 컴퓨터에서 네트워크 공유 경로 이거나 원격 컴퓨터의 폴더 경로 수 있음.

 

배포할 추가 파일 (원격 Windows 디버거)   
배포 디렉터리 속성이 설정 되어 있으면이 배포 디렉터리에 복사할 추가 파일을 세미콜론으로 구분한 목록. 
 
Visual C++ 디버그 런타임 라이브러리를 배포할 (원격 Windows 디버거)   
배포 디렉터리 속성을 설정하면 Visual C++ 디버그 런타임 라이브러리는 현재 플랫폼에 대한 네트워크 공유에 복사 해야 하는지 지정

 

VC++ 디렉토리  

 

실행 디렉터리
실행 파일을 검색할 디렉터리. PATH 환경 변수에 해당

 

포함 디렉터리
소스 코드에서 참조되는 포함 파일을 검색할 디렉터리. INCLUDE 환경 변수에 해당.

 

참조 디렉터리
#using 지시문에 의해 소스 코드에서 참조되는 어셈블리 및 모듈(메타데이터)을 검색할 디렉터리. LIBPATH 환경 변수에 해당.

 

라이브러리 디렉터리
라이브러리를 검색할 디렉터리(런타임 라이브러리 포함). LIB 환경 변수에 해당.

 

소스 디렉터리
IntelliSense에 사용하기 위해 소스 파일을 검색할 디렉터리.

 

디렉터리 제외
빌드 종속성을 확인할 때 검색하지 않을 디렉터리.

 

C/C++

 

디버그 정보 형식 


C7 호환(/Z7) : C 7.0 호환 디버깅 정보를 생성 


프로그램 데이터베이스(/Zi) : 완전한 디버깅 정보를 생성. x64


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

 

경고 수준
컴파일러에서 생성한 가장 높은 수준의 경고 지정. W0~W4
 C/C++ 빌드 오류 확인 : http://msdn.microsoft.com/ko-kr/library/8x5x43k7(v=vs.100).aspx

 

최적화 

 

최적화
사용 안 함(/Od) : 최적화 사용 안함
크기 최소화 (/O1) : 작은 코드를 만듦
속도 최대화 (/O2) : 빠른 코드를 만듦
최대 최적화 (/Ox) : 최대 최적화(/Ob1gity /Gs)를 사용

 

인라인 함수 확장
사용 안 함 (/Ob0) : 인라인 함수 확장 사용 안함
__Inline만 확장 (/Ob1) : 클래스 선에 정의된 C++ 멤버함수, inline, __inline, forceinline, __inline으로 표시된 함수
적합한 것 모두 확장 (/Ob2) : inline이나 __inline으로 표시된 함수와 컴파일러에서 선택한 기타 함수로 확장

 

내장 함수 사용(/Oi)
내장 함수를 사용하는 프로그램은 함수 호출의 오버헤드가 없기 때문에 빠르게 실행되지만 추가 코드를 만들기 때문에 프로그램이 커질 수 있음

 

크기 또는 속도
코드 크기 우선 (/Os) : 속도보다 크기를 우선적으로 처리하도록 컴파일러에 지시하여 EXE 파일과 DLL의 크기를 최소화
코드 속도 우선 (/Pt) : 크기보다 속도를 우선적으로 처리하도록 컴파일러에 지시하여 EXE 파일과 DLL의 속도를 최대화

 

프레임 포인터 생략
예 (/Oy) : 프레임 포인터를 설정하고 제거할 필요가 없기 때문에 이 옵션을 사용하면 함수 호출 속도가 빨라짐.

 

파이버 안전 최적화 사용 
예 (/GT) : 정적 스레드 로컬 저장소를 사용하여 할당한 데이터의 파이버 안전을 지원

 

전체 프로그램 최적화
예 (/GL) : 전체 프로그램 최적화를 사용

 

코드 생성 

 

C 런타임 라이브러리

옵션

C Run-Time Library

연관 DLL

특징

전처리 매크로

/MTlibcmt.lib  멀티스레드, 정적 링크_MT
/MDmsvcrt.libmsvcr100.dll멀티스레드, 동적 링크_MT, _DLL
/MTdlibcmtd.lib 멀티스레드, 정적 링크(Debug)_DEBUG, _MT
/MDdmsvcrtd.libmsvcr100d.dll멀티스레드, 동적링크(Debug)_DEBUG, _MT, _DLL

 

 

입력 

 

추가 종송성
링크 명령줄에 kernel32와 같이 추가할 항목을 지정

예) DirectX9 : d3d.lib d3dx9.lib winmm.lib               Open GL : opengl32.lib; glu32.lib; glut32.lib


'Programming > MFC' 카테고리의 다른 글

timeSetEvent 64bit 오류  (0) 2017.07.04
MFC app MANIFEST for x64 including x86 COMCTL32.dll  (0) 2017.07.04
런타임 라이브러리 (Run-time Libraries)  (0) 2017.07.03
CFile Class  (0) 2017.06.28
C2664 : CString Format 에러 대처법  (0) 2017.06.27