← Назад к вопросам

Какие пакетные менеджеры для C++ знаешь (Conan, vcpkg) и для чего они нужны?

1.0 Junior🔥 121 комментариев
#Сборка и инструменты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Пакетные менеджеры C++: Conan и vcpkg

В отличие от Python (pip) или Node.js (npm), C++ долго не имел стандартного пакетного менеджера. Сегодня есть два основных решения: Conan и vcpkg.

Conan

Conan — это мощный, независимый от платформы менеджер зависимостей.

Основные особенности

  1. Кроссплатформенность — работает на Windows, Linux, macOS
  2. Управление версиями — спецификация требуемых версий зависимостей
  3. Локальный кэш — пакеты скачиваются один раз, затем переиспользуются
  4. Recipes — conanfile.py описывает как собрать пакет

Пример использования

# conanfile.txt (простой способ)
[requires]
boost/1.80.0
zlib/1.2.13
nlohmann_json/3.11.2

[generators]
CMakeDeps
CMakeToolchain

[options]
shared=False
fPIC=True

Установка зависимостей:

conan install . --output-folder=build -s compiler.version=11
cd build
cmake .. -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake
make

Продвинутое: conanfile.py

from conan import ConanFile
from conan.tools.cmake import cmake_layout, CMake

class MyProject(ConanFile):
    name = "myproject"
    version = "1.0"
    settings = "os", "compiler", "build_type", "arch"
    requires = "boost/1.80.0", "openssl/3.0.0"
    
    def layout(self):
        cmake_layout(self)
    
    def generate(self):
        tc = CMakeToolchain(self)
        tc.generate()
    
    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

vcpkg

vcpkg — менеджер Microsoft, созданный для Visual Studio.

Основные особенности

  1. Microsoft ориентированный — отличная интеграция с Visual Studio
  2. Простота — удобен для начинающих
  3. Порты — большая библиотека готовых портов (~2500)
  4. Локальная сборка — компилирует источники локально

Пример использования

# Установка vcpkg
git clone https://github.com/Microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh

# Установка пакетов
./vcpkg install boost:x64-linux
./vcpkg install openssl:x64-linux
./vcpkg install nlohmann-json:x64-linux

CMakeLists.txt с vcpkg

cmake_minimum_required(VERSION 3.15)
project(MyApp)

find_package(Boost REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(nlohmann_json REQUIRED)

add_executable(app main.cpp)
target_link_libraries(app
    PRIVATE
    Boost::boost
    OpenSSL::Crypto
    nlohmann_json::nlohmann_json
)

vcpkg.json (для project mode)

{
  "name": "myproject",
  "version-string": "1.0.0",
  "dependencies": [
    "boost",
    "openssl",
    "nlohmann-json",
    { "name": "zlib", "version>=": "1.2.13" }
  ]
}

Сравнение Conan vs vcpkg

КритерийConanvcpkg
КроссплатформностьОтличнаяХорошая
Кривая обученияКрутаяМягкая
ГибкостьОчень высокаяСредняя
Для новичковСложноватоПроще
EnterpriseХорошоЛучше
Размер экосистемы~2000 рецептов~2500 портов
Интеграция с IDECMake-basedVisual Studio native

Когда использовать

Conan лучше для:

  • Сложных проектов — много зависимостей, вариаций конфигов
  • Кроссплатформной разработки — Linux, macOS, Windows
  • CI/CD pipelines — интеграция с Docker, GitHub Actions
  • Больших компаний — более мощный инструмент

Пример Conan в CI:

conan install . --profile:host=linux_gcc11 --profile:build=default
conan build .
conan create . --user=mycompany --channel=stable

vcpkg лучше для:

  • Новичков — проще начать
  • Windows проектов — особенно с Visual Studio
  • Быстрого прототипирования — меньше конфигурации
  • Интеграции с Visual Studio — встроенная поддержка

Практический пример: Backend сервис

// main.cpp с использованием пакетных менеджеров
#include <iostream>
#include <nlohmann/json.hpp>
#include <boost/asio.hpp>
#include <openssl/ssl.h>

using json = nlohmann::json;
using boost::asio::ip::tcp;

int main() {
    // Все зависимости установлены через Conan или vcpkg
    json config;
    config["host"] = "0.0.0.0";
    config["port"] = 8080;
    
    std::cout << "Server config: " << config.dump(2) << std::endl;
    return 0;
}

Заключение

Conan — для серьезной разработки, кроссплатформенности, enterprise. vcpkg — для Windows разработки и простоты.

Оба решения избавляют от ручной загрузки и компиляции зависимостей, что значительно упрощает разработку C++.