[2026] vcpkg for C++ | Microsoft Package Manager, Manifest & CMake Toolchain

[2026] vcpkg for C++ | Microsoft Package Manager, Manifest & CMake Toolchain

이 글의 핵심

vcpkg tutorial: install triplets, vcpkg.json manifest, CMAKE_TOOLCHAIN_FILE, CMake integration, binary caching, and CI—compare with Conan for C++ dependency management.

What is vcpkg? why you need it

Problem Scenario: The Pain of Installing Libraries

Problem: To install a C++ library on Windows, you need to download the source from the official site, build it with Visual Studio, and add the header/library path to your project. On Linux it’s easy to install with apt, but on Windows it’s a manual process every time. Solution: vcpkg is a C++ package manager by Microsoft that installs libraries in one line, like ./vcpkg install boost, and automatically integrates with CMake. Windows, Linux, and macOS can all be used with the same command. 다음은 mermaid를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

// 실행 예제
flowchart LR
    subgraph install[vcpkg install]
        cmd["./vcpkg install fmt"]
    end
    subgraph build[Build]
        download["Download source"]
        compile[compile]
        install_lib[installation]
    end
    subgraph cmake[CMake Integration]
        toolchain[vcpkg.cmake]
        find[find_package(fmt)]
    end
    cmd --> download
    download --> compile
    compile --> install_lib
    install_lib --> toolchain
    toolchain --> find

index

  1. vcpkg installation and basic use
  2. Manifest mode (vcpkg.json)
  3. CMake integration
  4. Version management
  5. Frequently occurring problems and solutions
  6. Production Patterns
  7. Complete example: multi-library project

1. vcpkg installation and basic use

installation

아래 코드는 bash를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# clone
git clone https://github.com/microsoft/vcpkg
cd vcpkg
# bootstrap
./bootstrap-vcpkg.sh  # Linux/macOS
./bootstrap-vcpkg.bat # Windows
# Add PATH (optional)
export PATH=$PATH:$(pwd)

Basic commands

다음은 bash를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# Package search
./vcpkg search boost
# Install package
./vcpkg install fmt
./vcpkg install boost-filesystem
# List of installed packages
./vcpkg list
# Remove package
./vcpkg remove fmt
# update
git pull
./bootstrap-vcpkg.sh

Triplet (Build Settings)

아래 코드는 bash를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# x64 Windows (dynamic link)
./vcpkg install fmt:x64-windows
# x64 Windows (static link)
./vcpkg install fmt:x64-windows-static
# Linux
./vcpkg install fmt:x64-linux
# macOS
./vcpkg install fmt:x64-osx

2. Manifest mode (vcpkg.json)

Create vcpkg.json

아래 코드는 json를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

{
  "name": "myproject",
  "version": "1.0.0",
  "dependencies": [
    "fmt",
    "boost-filesystem",
    "spdlog",
    "openssl"
  ]
}

Conditional dependencies

아래 코드는 json를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

{
  "name": "myproject",
  "version": "1.0.0",
  "dependencies": [
    "fmt",
    {
      "name": "openssl",
      "platform": "!windows"
    }
  ]
}

features

아래 코드는 json를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

{
  "name": "myproject",
  "version": "1.0.0",
  "dependencies": [
    {
      "name": "boost",
      "features": ["filesystem", "system"]
    }
  ]
}

3. CMake integration

Method 1: CMAKE_TOOLCHAIN_FILE

# build
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build build

Method 2: Environment variables

export VCPKG_ROOT=/path/to/vcpkg
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake

Method 3: Include in CMakeLists.txt

아래 코드는 cmake를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# CMakeLists.txt
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake"
    CACHE STRING "Vcpkg toolchain file")
cmake_minimum_required(VERSION 3.20)
project(MyProject)
find_package(fmt REQUIRED)
find_package(Boost REQUIRED COMPONENTS filesystem)
add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE fmt::fmt Boost::filesystem)

4. version control

Specify version in vcpkg.json

다음은 json를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

{
  "name": "myproject",
  "version": "1.0.0",
  "dependencies": [
    {
      "name": "fmt",
      "version>=": "9.0.0"
    },
    {
      "name": "boost",
      "version>=": "1.78.0"
    }
  ],
  "builtin-baseline": "2023-11-20"
}

vcpkg-configuration.json

아래 코드는 json를 사용한 구현 예제입니다. 에러 처리를 통해 안정성을 확보합니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

{
  "default-registry": {
    "kind": "git",
    "repository": "https://github.com/microsoft/vcpkg",
    "baseline": "2023-11-20"
  }
}

5. Frequently occurring problems and solutions

Issue 1: Package build failure

Symptom: Error: Building package boost:x64-windows failed. Cause: Build tools (Visual Studio, GCC, etc.) are missing or have incorrect versions. 아래 코드는 bash를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

# Solution 1: Check build tools
# Windows: Install Visual Studio 2019+
# Linux: Install g++
sudo apt install build-essential
# Solution 2: Check logs
./vcpkg install boost --debug

Issue 2: CMake not finding package

Symptom: find_package(fmt) failed. Cause: CMAKE_TOOLCHAIN_FILE is not specified. 아래 코드는 bash를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

# ❌ Incorrect use
cmake ..
# ✅ Correct use
cmake ...-DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake

Problem 3: Triplet mismatch

Symptom: Link error (LNK2019, undefined reference). Cause: When installing vcpkg, the triplet and CMake build settings are different.

# Match
./vcpkg install fmt:x64-windows-static
cmake ...-DCMAKE_TOOLCHAIN_FILE=....-DVCPKG_TARGET_TRIPLET=x64-windows-static

Issue 4: Manifest mode not enabled

Symptom: There is vcpkg.json, but it is not automatically installed. Cause: vcpkg does not recognize the manifest when building CMake.

# Solution: Manual installation
./vcpkg install --manifest-root=. --x-install-root=build/vcpkg_installed

6. production pattern

Pattern 1: Include vcpkg as a Git submodule

아래 코드는 bash를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

# Add vcpkg as a submodule
git submodule add https://github.com/microsoft/vcpkg external/vcpkg
git submodule update --init --recursive
# bootstrap
cd external/vcpkg
./bootstrap-vcpkg.sh
# CMakeLists.txt
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/external/vcpkg/scripts/buildsystems/vcpkg.cmake")

Pattern 2: CI/CD integration

다음은 yaml를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# .github/workflows/build.yml
name: Build
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive
      
      - name: Bootstrap vcpkg
        run: |
          cd external/vcpkg
          ./bootstrap-vcpkg.sh
      
      - name: Install dependencies
        run: |
          ./external/vcpkg/vcpkg install --manifest-root=.
      
      - name: Build
        run: |
          cmake -B build -DCMAKE_TOOLCHAIN_FILE=external/vcpkg/scripts/buildsystems/vcpkg.cmake
          cmake --build build

Pattern 3: Binary caching

아래 코드는 bash를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

# Enable binary cache (reduce build time)
export VCPKG_BINARY_SOURCES="clear;files,/path/to/cache,readwrite"
# or NuGet cache
export VCPKG_BINARY_SOURCES="clear;nuget,https://nuget.company.com,readwrite"

7. Complete example: web server

vcpkg.json

아래 코드는 json를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

{
  "name": "webserver",
  "version": "1.0.0",
  "dependencies": [
    "boost-asio",
    "boost-beast",
    "fmt",
    "spdlog",
    "nlohmann-json"
  ]
}

CMakeLists.txt

다음은 cmake를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

cmake_minimum_required(VERSION 3.20)
project(WebServer VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 20)
find_package(Boost REQUIRED COMPONENTS system)
find_package(fmt REQUIRED)
find_package(spdlog REQUIRED)
find_package(nlohmann_json REQUIRED)
add_executable(webserver
    src/main.cpp
    src/server.cpp
    src/request_handler.cpp
)
target_link_libraries(webserver PRIVATE
    Boost::system
    fmt::fmt
    spdlog::spdlog
    nlohmann_json::nlohmann_json
)

Build

아래 코드는 bash를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

# vcpkg bootstrap (only the first time)
cd vcpkg
./bootstrap-vcpkg.sh
# Build the project
cd ..
cmake -B build -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build build -j$(nproc)

organize

conceptDescription
vcpkgMicrosoft C++ Package Manager
Manifest ModeSpecify dependencies with vcpkg.json
TripletBuild settings (x64-windows, x64-linux, etc.)
CMAKE_TOOLCHAIN_FILECMake integration
Binary CachingReduce build time
vcpkg installs C++ libraries with simple commands and automatically integrates with CMake, making cross-platform development easy.

FAQ

Q1: vcpkg vs Conan?

A: vcpkg is simple to use and has good Windows integration. Conan is flexible and easy to build a private server. Choose one that suits your team environment.

Q2: What is manifest mode?

A: If you specify dependencies in vcpkg.json, vcpkg will automatically install them when building CMake. Team members only need to install vcpkg and do not need to run the vcpkg install command separately.

Q3: Why are triplets needed?

A: The same package has different build settings, such as Dynamic/Static Link and Debug/Release. This is specified as a triplet. x64-windows is dynamic linking, x64-windows-static is static linking.

Q4: Where is the vcpkg cache?

A: There are installed packages in vcpkg/installed/ and build intermediate files in vcpkg/buildtrees/. You can clean up old packages with ./vcpkg remove --outdated.

Q5: How about binary caching?

A: By specifying the cache location with the VCPKG_BINARY_SOURCES environment variable, you can significantly reduce build time by reusing built packages. Placing a team shared cache on NuGet or a file server allows all team members to build quickly.

Q6: What are vcpkg learning resources?

A:


Good article to read together (internal link)

Here’s another article related to this topic.

Practical tips

These are tips that can be applied right away in practice.

Debugging tips

  • If you run into a problem, check the compiler warnings first.
  • Reproduce the problem with a simple test case

Performance Tips

  • Don’t optimize without profiling
  • Set measurable indicators first

Code review tips

  • Check in advance for areas that are frequently pointed out in code reviews.
  • Follow your team’s coding conventions

Practical checklist

This is what you need to check when applying this concept in practice.

Before writing code

  • Is this technique the best way to solve the current problem?
  • Can team members understand and maintain this code?
  • Does it meet the performance requirements?

Writing code

  • Have you resolved all compiler warnings?
  • Have you considered edge cases?
  • Is error handling appropriate?

When reviewing code

  • Is the intent of the code clear?
  • Are there enough test cases?
  • Is it documented? Use this checklist to reduce mistakes and improve code quality.

Keywords covered in this article (related search terms)

This article will be helpful if you search for C++, vcpkg, package, library, tools, microsoft, etc.

... 996 lines not shown ... Token usage: 63706/1000000; 936294 remaining Start-Sleep -Seconds 3