Официальная документация: Microsoft vcpkg Getting Started
vcpkg — это кроссплатформенный менеджер зависимостей для C и C++, разработанный Microsoft. Его основная задача — избавить разработчиков от ручной настройки сторонних библиотек на разных операционных системах.
Представим ситуацию: ты начинаешь новый проект или подключаешься к существующему. Без менеджера пакетов пришлось бы вручную искать исходники библиотек, настраивать пути компиляции, решать конфликты версий и повторять этот процесс на каждой машине. vcpkg автоматизирует поиск, загрузку, сборку и интеграцию библиотек, делая процесс воспроизводимым и предсказуемым.
Режим манифеста — это рекомендуемый способ работы с vcpkg. В этом режиме зависимости проекта описываются в файле vcpkg.json, аналогично requirements.txt в Python или package.json в Node.js.
Благодаря этому любой разработчик может получить идентичное окружение, выполнив одну команду. Зависимости устанавливаются локально (можно зафиксировать конкретные версии библиотек) в каталог проекта, что исключает конфликты версий между разными проектами.
Все эти настройки хранятся в папке с проектом
Процесс установки зависит от операционной системы, но общая логика едина: клонирование репозитория, выполнение скрипта инициализации и настройка переменных окружения.
Перед установкой убедитесь, что в системе установлены:
- Git
- Компилятор C++ (MSVC на Windows, GCC/Clang на Linux и macOS)
- CMake
-
Выберите папку для установки. Рекомендуемый путь:
C:\vcpkg -
Создайте папку, откройте терминал от имени администратора и выполните:
git clone https://github.com/microsoft/vcpkg C:\vcpkg
cd C:\vcpkg
.\bootstrap-vcpkg.bat -disableMetricsNote
Параметр -disableMetrics отключает сбор анонимной телеметрии.
- Создайте переменную
VCPKG_ROOTи добавьте vcpkg в переменнуюPATH:
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\vcpkg", "Machine")
[Environment]::SetEnvironmentVariable("VCPKG_ROOT", "C:\vcpkg", "Machine")Изменения вступают в силу по мере новых процессов системы. Рекомендуется перезапустить операционную систему.
- Установите зависимости:
Для Debian/Ubuntu
sudo apt update && sudo apt install git curl zip unzip tar vcpkgДля Arch-like Linux
sudo pacman -Syu git curl zip unzip tar vcpkg- Склонируйте и инициализируйте vcpkg:
git clone https://github.com/microsoft/vcpkg $VCPKG_ROOT
cd $VCPKG_ROOT
./bootstrap-vcpkg.sh -disableMetricsNote
Параметр -disableMetrics отключает сбор анонимной телеметрии.
-
Установите homebrew — менеджер пакетов для MacOS.
-
Установите vcpkg:
brew install vcpkg- Склонируйте и инициализируйте vcpkg:
git clone https://github.com/microsoft/vcpkg $VCPKG_ROOT
cd $VCPKG_ROOT
./bootstrap-vcpkg.sh -disableMetricsNote
Параметр -disableMetrics отключает сбор анонимной телеметрии.
В корне вашего проекта выполните:
vcpkg new --applicationКоманда создаст два файла:
vcpkg.json— описывает прямые зависимости проекта.vcpkg-configuration.json— управляет источниками пакетов и базовыми версиями (baseline), что позволяет «заморозить» состояние репозитория и избежать неожиданных обновлений
Пример vcpkg.json:
{
"dependencies": ["sfml", "boost"]
}Используйте команду add port для добавления библиотек:
vcpkg add port sfml boostCMake
Передайте путь к toolchain-файлу vcpkg при конфигурации:
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmakeТехнически проект можно собрать, установив зависимости через системный менеджер (pacman, apt, brew). Однако такой подход имеет недостатки:
- сложно фиксировать версии библиотек
- различия в путях и конфигурациях между дистрибутивами
- отсутствие единого интерфейса для всех платформ
vcpkg устраняет эти проблемы, предоставляя согласованное поведение на всех ОС.
Для переноса скомпилированных библиотек в другие среды разработки или сборки необходимо сначала установить зависимости, а затем экспортировать их:
vcpkg install
vcpkg export --zip --output-dir=./vcpkg_sdksWarning
Скомпилированные бинарные файлы жестко привязаны к операционной системе. Для обеспечения кроссплатформенности эти команды необходимо выполнить отдельно на Windows и на Linux, а затем объединить содержимое папок installed из обоих архивов в одну структуру (либо подготовить два отдельных архива и выбирать нужный через CMake).
В результате будет создан ZIP-архив, содержащий готовые к использованию библиотеки, заголовочные файлы и CMake-конфигурации.
Чтобы проект использовал локальные зависимости вместо попытки скачать их из интернета, необходимо отключить режим манифеста и указать путь к локальному toolchain-файлу.
- Добавить строку до вызова команды
project()
set(VCPKG_MANIFEST_MODE OFF)- Заменить переменную окружения на относительный путь к экспортированной папке с зависимостями
{
"name": "vcpkg",
"hidden": true,
"toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
}, {
"name": "vcpkg",
"hidden": true,
"toolchainFile": "${sourceDir}/vcpkg-export/scripts/buildsystems/vcpkg.cmake"
},- Просмотр установленных пакетов:
vcpkg list - Поиск доступных портов:
vcpkg search <имя> - Информация о пакете:
vcpkg info <порт>