Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

nomad-programmer

[Programming/C++] vcpkg 본문

Programming/C++

[Programming/C++] vcpkg

scii 2024. 8. 5. 21:55

vcpkg는 Microsoft 및 C++ 커뮤니티에서 유지 및 관리하는 무료 오픈 소스 C/C++ 패키지 관리자이다. 2016년에 시작된 이 기능은 개발자가 프로젝트를 최신 버전으로 마이그레이션하는 데 도움을 준다. 

vcpkg는 Windows, MacOS, Linux에서 개발자가 사용하는 플랫폼 간 도구로 발전했다. vcpkg에는 모든 빌드 및 프로젝트 시스템을 지원하여 개발 프로세스를 용이하게 하도록 설계된 오픈 소스 라이브러리 및 엔터프라이즈 지원 기능의 대규모 레지스트리가 있다. 

vcpkg는 핵심 C++ 도구이며 CMake의 스크립트를 사용하여 C++로 작성된다. C/C++ 개발자 환경의 고유한 문제를 해결하기 위해 처음부터 설계되었다.

vcpkg를 사용해야 하는 이유

  • 2,200개가 넘는 오픈 소스 라이브러리를 선택하여 쉽게 설치할 수 있다.
  • Window, MacOS, Linux에 대한 일관된 플랫폼 간 환경을 조성할 수 있다.
  • 필요에 따라 원본에서 종속성을 빌드하고, 특정 요구 사항에 대한 사용자 지정을 제공한다.
  • 패키지와 프로젝트 간의 ABI 비호환성을 방지한다.
  • 종속성 그래프 버전 충돌 및 다이아몬드 문제를 방지한다.
  • 게임, 임베디드/IoT, 금융 등 여러 산업의 C/C++ 개발자가 이를 사용중이다.
  • MSBuild 및 CMake 사용자의 경우, 원활한 종속성 환경을 통해 빌드 환경을 구성할 수 있다.

https://github.com/microsoft/vcpkg

 

GitHub - microsoft/vcpkg: C++ Library Manager for Windows, Linux, and MacOS

C++ Library Manager for Windows, Linux, and MacOS. Contribute to microsoft/vcpkg development by creating an account on GitHub.

github.com


vcpkg 설치

1. vcpkg 리포지토리 클론

git clone https://github.com/microsoft/vcpkg.git

2. bootstrap 스크립트 실행

# 윈도우즈
cd vcpkg && bootstrap-vcpkg.bat

# 리눅스 & MacOS
cd vcpkg && bootstrap-vcpkg.sh

3. 자동 완성을 위한 명령어 실행

# 본인에게 맞는 쉘 타입을 지정
./vcpkg integrate [bash | zsh | ...]

4. 환경 변수 등록 <선택 사항>

export VCPKG_ROOT="${HOME}/apps/vcpkg"
export PATH="${PATH}:${VCPKG_ROOT}"

5. 이러면 설치는 끝이다. 간단하다.

 


vcpkg 사용 방법

  • 라이브러리 검색
    • vcpkg search <package_name>
      • ex) vcpkg search fmt
  • 라이브러리 설치
    • vcpkg install <package_name>
      • ex) vcpkg install fmt
  • 라이브러리 제거
    • vcpkg remove <package_name>
      • ex) vcpkg remove fmt

vcpkg를 이용한 C++ Build

global하게 사용

"fmt" 라이브러리를 추가해서 빌드한다고 가정하는 예제이다.
우선, vcpkg로 fmt 패키지를 설치해야 한다.

vcpkg install fmt

간단한 C++ 코드 작성을 하자.

// main.cpp

#include <fmt/core.h>

int main()
{
    fmt::print("Hello World!\n");
    return 0;
}

CMakeLists.txt 파일 작성

# cmake 최소 버전 명시
cmake_minimum_required(VERSION 3.20)

# 프로젝트 이름
project(test_pkg_mgr)

# 타켓 프로그램 정의
add_executable(main main.cpp)

# 프로젝트에서 사용할 수 있도록 패키지 검색
find_package(fmt CONFIG REQUIRED)

# 타켓 프로그램을 링킹할 때 필요한 라이브러리 지정
target_link_libraries(main PRIVATE fmt::fmt)

이렇게 작성 후 cmake . 명령을 내리면 fmt를 찾을 수 없다는 에러를 맞닥뜨릴 것이다. 그 이유는, cmake는 아직 vcpkg의 존재를 모르기 때문이다. 

따라서 cmake에게 vcpkg의 존재를 알려야 한다. 다음과 같이 configure 단에서 설정해주자.

# tool chain 사용
cmake . -B build --toolchain=<vcpkg_dir>/scripts/buildsystems/vcpkg.cmake

# 혹은

# tool chain file 사용
cmake . -B build -DCMAKE_TOOLCHAIN_FILE=<vcpkg_dir>/scripts/buildsystems/vcpkg.cmake

이렇게 빌드하면 잘 진행되는 것을 볼 수 있다. 그 후 실행파일을 만들기 위해 빌드를 진행하면 끝이다.

# 실행 파일 빌드
cmake --build build

 

project 별로 패키지 설치 후 사용 (manifest)

진행중인 혹은 진행할 디렉토리로 이동 후 아래의 명령을 실행하자.

vcpkg new --application

그러면 vcpkg-configuration.json, vcpkg.json 파일이 생성될 것이다. 그 후, "fmt" 패키지를 추가한다.

vcpkg add port fmt

이렇게 추가하면 vcpkg.json 파일이 다음과 같이 되어있을 것이다.

{
    "dependencies": [
        "fmt"
    ]
}

이것은 매니페스트 파일이다. vcpkg는 매니페스트 파일을 읽어 설치할 종속성을 알아보고 CMake와 통합하여 프로젝트에 필요한 종속성을 제공한다.

그 후, 위와 똑같이 C++ 작성 및 CMakeLists.txt 파일 작성하여 빌드하면 된다.


참고

https://learn.microsoft.com/en-us/vcpkg/get_started/get-started?pivots=shell-cmd

 

Install and use packages with CMake

Tutorial guides the user through the process of installing and using packages with CMake.

learn.microsoft.com

 

https://doc.cgal.org/latest/Surface_mesh_skeletonization/index.html

 

CGAL 5.5.2 - Triangulated Surface Mesh Skeletonization: User Manual

AuthorXiang Gao, Sébastien Loriot and Andrea Tagliasacchi Introduction Skeletons are effective shape abstractions used in segmentation, shape matching, reconstruction, virtual navigation, etc. As the name implies, a curve skeleton is a graph of curvilinea

doc.cgal.org

 

https://doc.cgal.org/latest/Manual/packages.html#PartKernels

 

CGAL 5.5.2 - Manual: Package Overview

Algebraic Foundations Michael Hemmer This package defines what algebra means for CGAL, in terms of concepts, classes and functions. The main features are: (i) explicit concepts for interoperability of types (ii) separation between algebraic types (not nece

doc.cgal.org

 

https://velog.io/@copyrat90/getting-started-with-vcpkg

 

vcpkg로 C++ 오픈소스 라이브러리 간단 설치하기 (feat. Manifest mode)

vcpkg가 업데이트되어 프로젝트별로 의존성을 관리할 수 있게 됐다. C++ 오픈소스 의존성 관리하기 좋다. CMake와 통합도 잘 된다.

velog.io

 

CLion을 사용중인 개발자는 아래의 링크를 참고하면 된다.

https://www.jetbrains.com/help/clion/package-management.html#install-vcpkg

 

Vcpkg integration | CLion

 

www.jetbrains.com

 

Comments