vs2008을 10여년간 사용하다 vs2019를 사용하게 되어 boost를 설치 하려고 알아보니 vcpkg라는것이 있다고 하여
이런 저런 삽질을 진행한 결과를 정리한다.
참고 문서는 MS공식 문서가 제일 좋다.
vcpkg: a C++ package manager for Windows, Linux, and MacOS
설치
vcpkg를 설치할 경로에서 파워쉘을 실행하고 다음의 명령을 실행한다. GIT이 설치되어 있어야한다.
// vcpkg 저장소 clone
git clone https://github.com/microsoft/vcpkg.git
// 빌드
PS>./bootstrap-vcpkg.bat
빌드가 완료되면 vcpkg를 실행해볼 수 있다.
// 사용가능 패키지 검색
vcpkg search boost
// visual studio 연동 설정
vcpkg integrate install
// 파워쉘에서 자동완성을 지원해준다고 하는데 어떻게 사용하는지 아직 확인 불가
vcpkg integrate powershell
이렇게 환경을 구성했으면 triplet 에 대해서 알아야 한다.
x86-windows : dll 로 사용한다.
x86-windows-static : lib로 사용한다 MT 옵션 컴파일
x86-windows-static-md : lib로 사용한다. MD 옵션 컴파일
boost를 static link 하려면 다음과 같이 설치 한다.
vcpkg install boost:x86-windows-static-md
Visual studio 에서는 x86-windows가 기본값으로 되어 있어서 static 으로 사용하려면 vcxproj 파일을 열고 다음과 같이 설정을 추가 해야한다.
<PropertyGroup Label="Globals"> 항목을 찾아서 아래쪽에 추가한다.
<PropertyGroup Label="Globals">
<!-- .... -->
<VcpkgTriplet Condition="'$(Platform)'=='Win32'">x86-windows-static</VcpkgTriplet>
<VcpkgTriplet Condition="'$(Platform)'=='x64'">x64-windows-static</VcpkgTriplet>
</PropertyGroup>
처음에 dll 모드로 boost를 사용했더니 memory leak이 발생하였는데 이런때는
링커-입력-지연 로드된 DLL 에 boost의 dll을 지정해주면 된다.
오픈소스들중에 이런 문제가 종종 있는것 같다.
참고 링크 : https://stackoverflow.com/questions/9232837/how-to-remove-memory-leaks-between-opencv-1-1-and-mfc-6-0-without-linking-mfc-as
프로젝트 configuration이 Debug, Release 가 아닌 다른 이름이라면 이에 대한 설정도 별도로 해야 한다.
https://github.com/microsoft/vcpkg/blob/master/docs/about/faq.md#can-i-get-vcpkg-integration-for-custom-configurations
<PropertyGroup>
<VcpkgConfiguration Condition="'$(Configuration)' == 'MyRelease'">Release</VcpkgConfiguration>
</PropertyGroup>
ps.
파워쉘 자동완성 기능은 윈도우 기본 탑재 파워쉘에서는 정상 동작 하지 않는다.
powershell7 을 설치 해보니 자동 완성이 잘 동작 했다.
2020.06 버전 부터는 static link 사용 방법이 달라졌다.