출력 디렉터리는 모든 구성/플랫폼 에 맞춰 아래와 같이 생성한다.
$(SolutionDir)x86/Debug/
$(SolutionDir)x86/Release/
$(SolutionDir)x64/Debug/
$(SolutionDir)x64/Release/
그럼 디렉토리 구조는 아래와 같다.
┌ ProjectDir
├ x86
│ ├ Debug
│ └ Release
├ x64
│ ├ Debug
│ └ Release
└ Solution.sln
(중간 디렉터리는 변경하지 않는것이 좋다.)
써드파티 라이브러리를 사용할땐 항상 ($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 폴더를 나중에 지워도 되게)
[구성 속성]->[빌드 이벤트]->[빌드 후 이벤트]->[명령줄]
xcopy /d /i /Y "$(SolutionDir)3rdparty\bin\$(PlatformTarget)\$(Configuration)\*.*" "$(TargetDir)"
xcopy /d /i /Y "$(SolutionDir)3rdparty\bin\$(PlatformTarget)\*.*" "$(TargetDir)"
/d /i
옵션은 파일이 이미 존재한다면 복사하지 않는다는 옵션이다.
*.*
을 쓴 이유는 때로는 dll이 아닌 binary file을 복사해야할 수 도 있기 때문이다.
이제 include 폴더를 설정 한다.
[구성 속성]->[C/C++]->[일반]->[추가 포함 디렉터리]
$(SolutionDir)3rdparty/include/
마지막으로 lib 폴더를 설정한다.
[구성 속성]->[링커]->[일반]->[추가 라이브러리 디렉터리]
$(SolutionDir)/3rdparty/lib/$(PlatformTarget)/$(Configuration)/
$(SolutionDir)/3rdparty/lib/$(PlatformTarget)/
그리고 아래 옵션에서 사용될 lib들을 나열한다.
[구성 속성]->[링커]->[입력]->[추가 종속성]
명령 프롬프트 에서 dir /B *.lib 와 같이 입력하면 쉽게 Ctrl+C/V 로 복붙 할 수 있다.
[구성 속성]->[디버깅]->[작업 디렉터리]
$(OutDir)
디버깅용 디렉터리와 실행용 디렉터리가 다른건 모두 알고 있을 것이다.
이를 실행용 디렉터리로 항상 고정시켜놓는것이 좋다.
VS2013의 sdf 나 VS2015의 db 파일은 프로젝트에 종속될 필요가 없다.
[도구]->[옵션]->[텍스트 편집기]->[C/C++]->[고급]->[대체 fallback 위치]
에서 아래와 같이 설정한다.
윈도우의 임시 폴더에 db 파일이나 sdf 파일을 만드는 방법이다.
프로젝트를 배포할때 매번 필요없는 파일들을 삭제하지말고 배치파일로 삭제 파일을 만들자.
아래와 같이 쓸모없는 폴더나 파일을 삭제한다.
DEL
명령어와 RMDIR
명령어만 알면 된다.
IF EXIST "solution.VC.db" (
DEL "solution.VC.db"
)
IF EXIST "x64" (
RMDIR /S /Q "x64"
)