[Visual C++] Visual studio 프로젝트 설정

1. 출력 디렉터리

출력 디렉터리는 모든 구성/플랫폼 에 맞춰 아래와 같이 생성한다.
$(SolutionDir)x86/Debug/
$(SolutionDir)x86/Release/
$(SolutionDir)x64/Debug/
$(SolutionDir)x64/Release/
그럼 디렉토리 구조는 아래와 같다.

┌ ProjectDir
├ x86
│  ├ Debug
│  └ Release
├ x64
│  ├ Debug
│  └ Release
└ Solution.sln

(중간 디렉터리는 변경하지 않는것이 좋다.)

2. 3rdparty

써드파티 라이브러리를 사용할땐 항상 ($SolutionDir)3rdparty 라는 폴더를 만들고 사용하도록 하자.

전체 솔루션의 구조는 아래와 같다.

($SolutionDir)
┌ 3rdparty
│   ├ include
│   ├ lib
│   │   ├ x64
│   │   │   ├ Debug
│   │   │   └ Release
│   │   └ x86
│   │       ├ Debug
│   │       └ Release
│   └ bin
│       ├ x64
│       │   ├ Debug
│       │   └ Release
│       └ x86
│           ├ Debug
│           └ Release
├ project
├ solution.sln
├ x64
│   ├ Debug
│   └ Release
└ x86
    ├ Debug
    └ Release

먼저, 3rdparty/bin 에 있는것들은 x64, x86 폴더에 빌드 할때마다 파일(dll)이 복사되도록 해야한다.(x64,x86 폴더를 나중에 지워도 되게)

[구성 속성]->[빌드 이벤트]->[빌드 후 이벤트]->[명령줄]

Debug

xcopy /d /i /Y "$(SolutionDir)3rdparty\bin\x64\Debug\*.*" "$(TargetDir)"
xcopy /d /i /Y "$(SolutionDir)3rdparty\bin\x64\*.*" "$(TargetDir)"

Release

xcopy /d /i /Y "$(SolutionDir)3rdparty\bin\x64\Release\*.*" "$(TargetDir)"
xcopy /d /i /Y "$(SolutionDir)3rdparty\bin\x64\*.*" "$(TargetDir)"

/d /i 옵션은 파일이 이미 존재한다면 복사하지 않는다는 옵션이다.
*.*을 쓴 이유는 때로는 dll이 아닌 binary file을 복사해야할 수 도 있기 때문이다.

이제 include 폴더를 설정 한다.

[구성 속성]->[C/C++]->[일반]->[추가 포함 디렉터리]

$(SolutionDir)3rdparty/include/

마지막으로 lib 폴더를 설정한다.

[구성 속성]->[링커]->[일반]->[추가 라이브러리 디렉터리]
Debug

$(SolutionDir)/3rdparty/lib/x64/Debug/
$(SolutionDir)/3rdparty/lib/x64/

Release

$(SolutionDir)/3rdparty/lib/x64/Release/
$(SolutionDir)/3rdparty/lib/x64/

그리고 아래 옵션에서 사용될 lib들을 나열한다.

[구성 속성]->[링커]->[입력]->[추가 종속성]

명령 프롬프트 에서 *dir /B .lib 와 같이 입력하면 쉽게 Ctrl+C/V 로 복붙 할 수 있다.

3. 작업 디렉터리 설정

[구성 속성]->[디버깅]->[작업 디렉터리]

$(OutDir)

디버깅용 디렉터리와 실행용 디렉터리가 다른건 모두 알고 있을 것이다.

이를 실행용 디렉터리로 항상 고정시켜놓는것이 좋다.

4. 로컬 데이터베이스 파일

VS2013sdfVS2015db 파일은 프로젝트에 종속될 필요가 없다.

[도구]->[옵션]->[텍스트 편집기]->[C/C++]->[고급]->[대체 fallback 위치]

에서 아래와 같이 설정한다.

윈도우의 임시 폴더에 db 파일이나 sdf 파일을 만드는 방법이다.

5. clean 파일 만들기

프로젝트를 배포할때 매번 필요없는 파일들을 삭제하지말고 배치파일로 삭제 파일을 만들자.

아래와 같이 쓸모없는 폴더나 파일을 삭제한다.

DEL 명령어와 RMDIR 명령어만 알면 된다.

IF EXIST "solution.VC.db" (
	DEL "solution.VC.db"
)
IF EXIST "x64" (
	RMDIR /S /Q "x64"
)