C++ 라이브러리 시스템
C++은 다른 언어들과 다르게 라이브러리가 소스파일이 아니라 라이브러리 바이너리와 헤더로 나뉘어져 있고,
컴파일 과정에 헤더의 경로를 등록시키고, 라이브러리 바이너리를 링크 시켜주어야 한다.
그로 인해 새로운 라이브러리를 사용할 때마다 따로 컴파일, include 경로, 라이브러리 링크 등을 설정해주어야 한다.
내가 사용한 기존의 방법
git에서 submodule로 라이브러리를 추가하고, 배치파일 스크립트를 통해 CMake로 각각을 빌드하고 특정 폴더에 라이브러리 바이너리를 복사했다. 그 후 비주얼 스튜디오 프로젝트 설정에서 라이브러리를 등록해 사용했다.
하지만 배치파일 스크립트를 통해 커스텀으로 라이브러리를 컴파일 하기때문에 새로운 라이브러리를 추가할 때마다 빌드 스크립트의 작성과 프로젝트 설정에서 일일이 추가해야한다는 문제가 발생했다.
패키지 매니저
비교적 최신에 개발된 언어들에는 패키지 매니저가 있어 커맨드라인이나 세팅 파일을 통해 모듈이나 라이브러리 등을 쉽게 추가할 수 있다. 예를 들어 python에서 stringcase라는 모듈을 추가하고 싶다면 pip install stringcase라는 하나의 커맨드라인으로 추가할 수 있다.
C++도 라이브러리 문제를 해결하기 위해 패키지매니저가 개발되었다. 대표적으로는 vcpkg와 conan이 있다.
이 글에선 가장 많이 쓰이고 있는 vcpkg를 중점적으로 알아볼 것이다.
vcpkg는 비주얼 스튜디오와 통합하여 사용할 수 있는 패키지 매니저로, vcpkg로 다운받은 라이브러리를 바로 비주얼 스튜디오에서 바로 사용 가능하다.
자동화된 프로젝트 구성
내가 원하는 것은 전역 로컬에서만 관리되는 것이 아니라 다른 사람들과 공유되도록 프로젝트에 설치해 사용하는 라이브러리 관리이다. 배치파일로 vcpkg를 통해 필요한 라이브러리를 전역으로 다운하도록 하는것도 좋지만, 가장 명확한 방법으로는 프로젝트에 라이브러리를 설치하는 것이다.
vcpkg는 'manifest 모드'라는 것을 지원한다. manifest모드는 vcpkg.json이라는 파일을 통해 사용할 라이브러리를 지정해 프로젝트에 설치할 수 있도록 해주는 기능이다. 이 기능을 사용한다면 다른 사람들의 환경의 차이를 어느정도 해결할 수 있고, 비주얼 스튜디오나 CMake에서도 vcpkg를 지원하기 때문에 CI 스크립트를 작성할 때도 용이하다.
끝으로
수동으로 라이브러리를 설치하다가 자동화된 툴을 사용해보니 정말 편한것 같다.
이 글을 보신다면 vcpkg로 프로젝트를 구성해보는것을 추천한다.
'C++' 카테고리의 다른 글
[C++] vcpkg 라이브러리 패키징 (0) | 2024.08.07 |
---|---|
[C++] 제대로 알고 사용하자. atd::async (0) | 2024.07.13 |
[C++/Unreal] 커스텀 RPC 구현 기록 (0) | 2024.05.31 |
[C++] 에러코드를 메세지로 format하기 (0) | 2023.11.17 |
[C++] 클래스 멤버 메소드를 함수포인터, std::function 객체로 변환하기 (0) | 2023.11.06 |