VCPKG란?
마이크로소프트(Microsoft)가 개발한 툴로, 여러 C/C++ Library 를 간편하게 설치할 수 있도록 돕는다.
다양한 플랫폼에서 사용 가능하게 설계 되어, Windows 뿐만 아니라 Linux 및 MacOS에서 사용 가능하다.
https://vcpkg.io/en/index.html
Vcpkg를 Windows 에서 사용하기 위해서는
(1)Windows 7 이상, (2) Visual Studio 2015 Update 3 또는 그 이상의 버전이 설치되어 있어야 한다.
추가로 Git이 설치되어 있을 경우 이를 사용할 수 있다.
VCPKG 설치
VCPKG 다운로드
VCPKG 코드가 업로드 되어 있는 깃허브 저장소(GitHub repository)에서 다운 받을 수 있다.
다운 받는 방법은 git 명령어를 사용하는 방법과 깃허브에서 직접 압축 파일로 받는 방법 두 가지가 있다.
-
- 깃(git)이 설치되어 있다면 아래 명령어로 코드를 clone 하면 된다.
git clone https://github.com/microsoft/vcpkg
-
- 만일 없을 경우 직접 깃허브 저장소에 방문하여 다운 받는다.
설치 위치는 자유롭게 정할 수 있다.
이후 컴파일 과정에서 사용을 고려하면 각 드라이브 최상단(C:\ 등) 에 폴더를 생성해 저장하면 편할 것으로 생각된다.
전체 파일 경로는 영어로, 공백이 없으면 좋을 것으로 생각된다.
공식 홈페이지의 예제에 따르면 C:\src\vcpkg 나 C:\dev\vcpkg 과 같이 디렉토리를 생성하고 설치할 수 있다.
VCPKG 빌드
다운 받은 VCPKG 폴더로 이동하여 폴더 안에 bootstrap-vcpkg.bat 파일을 실행한다.
.\bootstrap-vcpkg.bat
VCPKG 사용법
- list: 현재 설치 된 라이브러리 확인
.\vcpkg list - install: 새로운 라이브러리 설치
.\vcpkg install [packages to install]
Visual studio에서 vcpkg에 설치된 라이브러리를 불러 활용하기 위해서는 아래와 같은 명령을 수행한다.
C:\vcpkg-2023.02.24> .\vcpkg integrate install Applied user-wide integration for this vcpkg root. CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg-2023.02.24/scripts/buildsystems/vcpkg.cmake" All MSBuild C++ projects can now #include any installed libraries. Linking will be handled automatically. Installing new libraries will make them instantly available.
명령을 조금 더 쉽게 수행하기 위해서는 이를 vcpkg 경로를 시스템 환경 변수에 등록한다.
시스템 속성>환경 변수> 시스템 변수>Path에 vcpkg 경로를 적고 저장한다.
이제 콘솔에서 vcpkg 폴더에 들어갈 필요 없이 vcpkg 명령이 수행된다.
Boost 라이브러리 설치
VCPKG에서 사용가능한 라이브러리 목록은 아래 링크에서 찾을 수 있다.
- arm-uwp
- arm64-windows
- x64-linux
- x64-osx
- x64-uwp
- x64-windows-static
- x64-windows
- x86-windows
이중 자신의 환경에 알맞는 라이브러리를 선택하여 설치한다.
여기서는 x64-windows를 설치하도록 한다.
정적 라이브러리가 필요한 경우 x64-windows-static을 설치할 수 있다.
.\vcpkg install boost:x64-windows
만약 이후에도 Visual studio에서 boost 라이브러리가 인식되지 않는다면 해당 VS 프로젝트 파일을 열어서 수정이 필요하다.
<PropertyGroup Label=”Globals”> 하위 섹션에 다음을 추가한다.
<PropertyGroup Label="Globals"> ... <VcpkgTriplet>x64-windows</VcpkgTriplet> <VcpkgEnabled>true</VcpkgEnabled> </PropertyGroup>
여기서 VcpkgTriplet 에 들어갈 내용은 자신의 환경에 따라 다르다.
자신이 설치한 boost 라이브러리에 따른다.
프로젝트의 속성 페이지>구성 속성>vcpkg>Triplet에 작성해도 된다.
각 라이브러리 패키지에는 설치 환경에 따른 옵션 종류가 다양하다.
예를 들어 boost 라이브러리 설치 시 사용 가능한 옵션의 종류에는 아래와 같이 있다.
만약 다음과 같은 에러가 난다면 프로젝트 속성과 설치한 boost 라이브러리 간에 설정 차이가 있는 것이다.
error LNK2038: mismatch detected for 'boost_log_abi': value 'v2_mt_nt6' doesn't match value 'v2s_mt_nt6' in xxx.obj
여기서 v2_mt_nt6와 v2s_mt_nt6의 차이는 다음과 같다.
- v2_mt_nt6: dynamically linked 되며 multithreading을 지원하는 windows vista 또는 더 높은 버전의 Windows (version 6) 를 지원하는 라이브러리 버전
- v2s_mt_nt6: statically linked되며 multithreading를 지원하는 windows vista 또는 더 높은 버전의 Windows (version 6)를 지원하는 라이브러리 버전
만약 boost library를 dynamically linked 시키기 위해서는 BOOST_LOG_DYN_LINK (log library를 dyn link) 또는 BOOST_ALL_DYN_LINK (boost의 전체 library를 dyn link) 를 정의해주어야 한다.
만약 vcpkg를 사용하지 않고 직접 컴파일 한 경우 static과 dynamic linked library 의 차이는 각 lib 파일 접두어(prefix)로 lib 가 붙는지 여부로 확인할 수 있다.
Boost 라이브러리 삭제
VCPKG 사용 시 와일드카드(*)가 사용되지 않는다.
boost 라이브러리의 경우 boost-xxx로 이름된 여러 라이브러리 파일들이 같이 설치 되는데 이를 삭제하기 위해서는 아래와 같은 명령어를 사용한다.
아래 명령어는 x64 Windows 환경으로 지정하여 설치한 boost 라이브러리를 모두 삭제하는 명령이다.
.\vcpkg remove boost-uninstall --triplet x64-windows --recurse
OpenCV 설치하기
OpenCV도 Boost 라이브러리와 마찬가지로 설치 환경에 따른 많은 옵션이 있다.
Windows X64 환경에서는 아래와 같이 설치한다.
C:\> vcpkg install opencv:x64-windows