VCPkg
VCPkg — свободный и кроссплатформенный менеджер пакетов от этих ваших Microsoft. Сей инструмент призван облегчить боль и страдания разработчиков, которым приходится собирать и подключать сторонние библиотеки к своим проектам на C++. Но, как обычно, что-то пошло не так.
Суть такова[править]
Представьте себе ситуацию: пишете вы, значит, на своём любимом C++ очередной велосипед, и вдруг понимаете, что для полного счастья не хватает какой-нибудь библиотеки. Ну, скажем, Boost, или Qt, или ещё какой-нибудь хрени, весом в овер 9000 мегабайт. И начинается адъ:
- Сначала надо найти, откуда эту либу скачать.
- Потом скачать, да не абы какую версию, а совместимую с вашим компилятором, ОСью и фазой Луны.
- Дальше, если повезёт, либа соберётся с полпинка, а если нет — готовьтесь к увлекательному путешествию по логам ошибок и форумам, где такие же бедолаги пытаются понять, что же пошло не так.
- После успешной (возможно) сборки нужно как-то впихнуть это чудо в свой проект, не поломав при этом остальные либы и не запутавшись в инклюдах, линковках и прочих радостях жизни плюсовика.
- И повторить это всё для каждой новой либы, каждого нового проекта, и при каждом обновлении.
В общем, задача не для слабонервных. И тут на сцену выходит VCPkg, весь в белом и с блёстками. Типа, он за вас все эти проблемы решит: сам найдёт нужную версию, сам скачает, сам соберёт, сам в проект подключит. Вам останется только написать #include <cool_lib.h> и радоваться жизни. Ну или нет.
Как оно (не) работает[править]
На словах всё звучит красиво, но на деле… Анон, ты же знаешь, как оно обычно бывает с продуктами от Microsoft? Правильно, через жопу. VCPkg не стал исключением.
- Скорость сборки: Если ты думаешь, что с VCPkg тебе больше не придется тратить время на сборку библиотек, то у меня для тебя плохие новости, мой юный друг. Эта сволочь будет компилировать их из исходников, каждый раз, по-новой, даже если ты просто опечатку в коде исправил. И скорость этой сборки такая, что за время ожидания можно успеть родить сына, вырастить дерево и построить дом, а оно все еще будет компилиться. Порой легче сходить на завод и выточить нужную деталь самому.
- Документация: Она как бы есть, но пользы от неё примерно столько же, сколько от прошлогоднего снега. Половина команд не работает, другая половина работает не так, как написано, а третья половина вообще нигде не задокументирована. Ищи свищи, как говорится.
- Порты: Это такие рецепты для сборки библиотек. Идея хорошая, но реализация… Кхм. Некоторые порты написаны криво, другие не обновляются годами, третьи вообще не собираются. А если ты захочешь добавить свой порт для какой-нибудь редкой либы, то готовься к тому, что тебе придется потратить несколько дней на изучение внутреннего устройства VCPkg и написание манифестов, от которых у нормального человека глаза на лоб лезут.
- Вендор-лок: Изначально VCPkg был заточен под Visual Studio, и хотя сейчас он вроде как поддерживает и другие компиляторы, но осадочек остался. Да и большинство портов все равно собираются с помощью MSBuild, так что если ты идейный линуксоид или маковод — будь готов к дополнительной боли. А ещё, если проект большой, VCPkg начинает жрать ресурсы как не в себя, и у него срывает крышу.
- Интеграция: С помощью нехитрых манипуляций, можно заставить CMake подружиться с VCPkg. Но увы, эта дружба весьма шаткая и хрупкая, и не обходится без костылей и подпорок. А если ты используешь другую систему сборки — ну что ж, соболезнуем.