Используешь ли пакетные менеджеры в C++ проектах?

«Используешь ли пакетные менеджеры в C++ проектах?» — вопрос из категории DevOps, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, обязательно. Для современных C++ проектов использование пакетных менеджеров — это стандарт, который решает проблему управления зависимостями.

Мой стек и подход:

  • vcpkg: Основной инструмент для проектов под Windows/Linux. Отлично интегрируется с CMake через find_package. Использую манифестный режим (vcpkg.json) для фиксации версий.
    // vcpkg.json
    {
      "dependencies": [
        "fmt",
        "spdlog",
        { "name": "boost-asio", "version>=": "1.82.0" }
      ]
    }
  • Conan: Выбираю для более сложных сценариев, особенно когда нужны кастомные опции сборки зависимостей или работа в кросскомпиляции.
  • CMake + FetchContent: Для лёгких header-only библиотек или внутренних модулей.

Практический пример настройки: В CI/CD пайплайне сборка начинается с восстановления зависимостей через vcpkg, что гарантирует одинаковые версии библиотек у всех разработчиков и на сервере. Это устраняет классическую проблему «а у меня на машине собирается».

Выгоды:

  1. Воспроизводимость сборки: Фиксация версий зависимостей.
  2. Ускорение онбординга: Новый разработчик делает git clone, cmake --preset=release — и всё собирается.
  3. Контроль над зависимостями: Легко обновлять, тестировать с новыми версиями и отслеживать уязвимости (через vcpkg audit).

Без пакетного менеджера поддержка сторонних библиотек в C++ превращается в рутину с ручным скачиванием, патчами и проблемами совместимости.