서론
현 직장에서 6년간 C#을 배우다보니 C# 환경에만 너무 익숙해져 있었는데,
(물론 C#만 한건 아니고 어쩔수없이 Ruby나 Jquery나 Vue도 다루긴 했지만..)
C#에서 개발하는게 얼마나 편한지 뼈저리게 느껴졌다.
일단 C#은 Nuget을 활용해서 라이브러리를 편하게 설치할 수 있는데,
C++은 사용하려는 라이브러리를 일일히 다운받고 설치한 다음 헤더에서 하나씩 참조를 걸어줘야한다..
Nuget을 활용했고, 다른 컴퓨터에서도 바로 Git에서 Clone을 받고 빌드하면 돌아갈 수 있는 환경을
최우선순위로 개발했던 나는 도저히 이런 방식을 사용하기 싫어서 검색하던 도중 vcpkg를 이용하면
Nuget까지는 아니지만, 어느정도 비슷한 환경을 구성할 수 있다고 하길래 이 방식으로 공부하기 시작했다.
이슈
하지만.. 국내 사이트는 물론 Stack Overflow, Youtube를 검색해서 따라해봐도 아래의 오류가 계속 발생했다.
Could NOT find Boost (missing: Boost_INCLUDE_DIR filesystem system)
C++을 처음하다보니 자연스럽게 CMake, vcpkg, boost 이 세개를 모두 배워야하는 상황이라
vscode에서 settings.json 값을 바꾸고, vcpkg를 지웠다 다시 설치해봐도, vcpkg Triplet 설정을 해봐도,
CMakeLists.txt에서 강제로 Boost_INCLUDE_DIR 등등 값을 설정해봐도 2주동안 해결이 되지 않았다.
그렇게 헤매던 중 드디어 해결 방법을 스스로 찾게 되어서 다른 사람들은 고생하지 않게 방법을 공유하게 되었다.
설정 방법
1. 원하는 폴더에서 git을 사용하여 github에 있는 vcpkg를 clone한다.
주의 : 경로에 한글이 존재하면 안된다.
git clone https://github.com/microsoft/vcpkg
2. vcpkg를 설치한다.
.\vcpkg\bootstrap-vcpkg.bat
3. vscode에서 CMake로 디버깅, 빌드, 실행을 하기 위해 아래의 익스텐션을 설치한다.
* C/C++
* CMake
* CMake Tools
4. vscode에서 Ctrl + Shift + P를 누른 뒤, CMake: Quick Start를 실행한다.
5. 프로젝트 폴더에 vcpkg.json 파일을 생성하고, 아래의 코드를 넣는다.
{
"name": "(프로젝트 이름)",
"version": "(프로젝트 버전),
"dependencies": [
{
"name": "boost"
}
],
"builtin-baseline": "9edb1b8e590cc086563301d735cae4b6e732d2d2"
}
여기서 builtin-baseline은, vcpkg는 라이브러리를 버전별로 설치할 수 없고 vcpkg의 Commit 버전에 맞는 라이브러리를
설치하는 방식이다. 작성 기준 2023.08.09 Release가 최신 버전이므로 해당 릴리즈의 커밋 코드를 적어놓았다.
6. CMakeLists.txt에 아래의 코드를 넣는다.
find_package(Boost REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
7. vscode에서 Ctrl + Shift + P를 누른 뒤, Prefrerences: Open Workspace Settings(JSON) 를 실행한다.
8. settings.json 파일에 아래의 코드를 작성한다. vcpkg 폴더는 vcpkg를 clone한 경로로 적으면 된다.
{
"cmake.configureSettings": {
"CMAKE_TOOLCHAIN_FILE": "{vcpkg 폴더}/scripts/buildsystems/vcpkg.cmake",
}
}
9. main.cpp에 아래의 코드를 적는다.
#include <boost/asio.hpp>
#include <iostream>
int main() {
boost::asio::io_context io;
boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));
t.wait();
std::cout << "Hello, world!" << std::endl;
return 0;
}
9. vscode에서 Ctrl + Shift + P를 누른 뒤, CMake: Clean Rebuild를 실행한다.
만약 Could Not Boost 오류가 발생하면 이 글을 읽기 전에 vcpkg에 설치된 Boost를 제거하거나,
build 폴더를 제거 후 다시 시도한다.
10. 빌드 후 실행 시 Hello, world!가 표시되면 정상적으로 설치된 걸 확인할 수 있다.
예제 프로젝트
https://github.com/Sparrkle/vcpkg-cmake-boost-sample
참고한 문서
https://int-i.github.io/cpp/2020-07-22/vcpkg-boost/
https://velog.io/@copyrat90/getting-started-with-vcpkg
https://learn.microsoft.com/en-us/vcpkg/consume/manifest-mode?tabs=cmake%2Cbuild-cmake