일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- vim
- Unity
- jupyter
- jupyter lab
- C언어 포인터
- 유니티
- 깃
- docker
- Flutter
- Algorithm
- HTML
- c#
- c# 추상 클래스
- Python
- 포인터
- c# 윈폼
- C++
- c# winform
- Houdini
- C# delegate
- 구조체
- dart 언어
- 플러터
- Data Structure
- 다트 언어
- github
- git
- 도커
- gitlab
- c언어
- Today
- Total
nomad-programmer
[Programming/C++] vcpkg 본문
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
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 search <package_name>
- 라이브러리 설치
- vcpkg install <package_name>
- ex) vcpkg install fmt
- vcpkg install <package_name>
- 라이브러리 제거
- vcpkg remove <package_name>
- ex) vcpkg remove fmt
- vcpkg remove <package_name>
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
https://doc.cgal.org/latest/Surface_mesh_skeletonization/index.html
https://doc.cgal.org/latest/Manual/packages.html#PartKernels
https://velog.io/@copyrat90/getting-started-with-vcpkg
CLion을 사용중인 개발자는 아래의 링크를 참고하면 된다.
https://www.jetbrains.com/help/clion/package-management.html#install-vcpkg
'Programming > C++' 카테고리의 다른 글
[Programming/C++] 예외 처리 생략과 실패 대응 (0) | 2024.09.15 |
---|---|
[Programming/C++] 사용자 정의 리터럴 (0) | 2024.09.09 |
[Programming/C++] 연산자 오버로딩의 대한 예제 (0) | 2023.06.14 |
[Programming/C++] 함수 포인터의 변형 (함수 포인터 배열 관련) (0) | 2023.03.02 |
[Programming/C++] 다중 재귀 호출 (aka. Divide-And-Conquer) (0) | 2023.03.01 |