← Назад к вопросам
Какие пакетные менеджеры для 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 — это мощный, независимый от платформы менеджер зависимостей.
Основные особенности
- Кроссплатформенность — работает на Windows, Linux, macOS
- Управление версиями — спецификация требуемых версий зависимостей
- Локальный кэш — пакеты скачиваются один раз, затем переиспользуются
- 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.
Основные особенности
- Microsoft ориентированный — отличная интеграция с Visual Studio
- Простота — удобен для начинающих
- Порты — большая библиотека готовых портов (~2500)
- Локальная сборка — компилирует источники локально
Пример использования
# Установка 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
| Критерий | Conan | vcpkg |
|---|---|---|
| Кроссплатформность | Отличная | Хорошая |
| Кривая обучения | Крутая | Мягкая |
| Гибкость | Очень высокая | Средняя |
| Для новичков | Сложновато | Проще |
| Enterprise | Хорошо | Лучше |
| Размер экосистемы | ~2000 рецептов | ~2500 портов |
| Интеграция с IDE | CMake-based | Visual 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++.