VCPkg

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

VCPkg — свободный и кроссплатформенный менеджер пакетов от этих ваших Microsoft. Сей инструмент призван облегчить боль и страдания разработчиков, которым приходится собирать и подключать сторонние библиотеки к своим проектам на C++. Но, как обычно, что-то пошло не так.

Жужжит регистри

Суть такова[править]

Представьте себе ситуацию: пишете вы, значит, на своём любимом C++ очередной велосипед, и вдруг понимаете, что для полного счастья не хватает какой-нибудь библиотеки. Ну, скажем, Boost, или Qt, или ещё какой-нибудь хрени, весом в овер 9000 мегабайт. И начинается адъ:

  1. Сначала надо найти, откуда эту либу скачать.
  2. Потом скачать, да не абы какую версию, а совместимую с вашим компилятором, ОСью и фазой Луны.
  3. Дальше, если повезёт, либа соберётся с полпинка, а если нет — готовьтесь к увлекательному путешествию по логам ошибок и форумам, где такие же бедолаги пытаются понять, что же пошло не так.
  4. После успешной (возможно) сборки нужно как-то впихнуть это чудо в свой проект, не поломав при этом остальные либы и не запутавшись в инклюдах, линковках и прочих радостях жизни плюсовика.
  5. И повторить это всё для каждой новой либы, каждого нового проекта, и при каждом обновлении.

В общем, задача не для слабонервных. И тут на сцену выходит VCPkg, весь в белом и с блёстками. Типа, он за вас все эти проблемы решит: сам найдёт нужную версию, сам скачает, сам соберёт, сам в проект подключит. Вам останется только написать #include <cool_lib.h> и радоваться жизни. Ну или нет.

Как оно (не) работает[править]

На словах всё звучит красиво, но на деле… Анон, ты же знаешь, как оно обычно бывает с продуктами от Microsoft? Правильно, через жопу. VCPkg не стал исключением.

  • Скорость сборки: Если ты думаешь, что с VCPkg тебе больше не придется тратить время на сборку библиотек, то у меня для тебя плохие новости, мой юный друг. Эта сволочь будет компилировать их из исходников, каждый раз, по-новой, даже если ты просто опечатку в коде исправил. И скорость этой сборки такая, что за время ожидания можно успеть родить сына, вырастить дерево и построить дом, а оно все еще будет компилиться. Порой легче сходить на завод и выточить нужную деталь самому.
  • Документация: Она как бы есть, но пользы от неё примерно столько же, сколько от прошлогоднего снега. Половина команд не работает, другая половина работает не так, как написано, а третья половина вообще нигде не задокументирована. Ищи свищи, как говорится.
  • Порты: Это такие рецепты для сборки библиотек. Идея хорошая, но реализация… Кхм. Некоторые порты написаны криво, другие не обновляются годами, третьи вообще не собираются. А если ты захочешь добавить свой порт для какой-нибудь редкой либы, то готовься к тому, что тебе придется потратить несколько дней на изучение внутреннего устройства VCPkg и написание манифестов, от которых у нормального человека глаза на лоб лезут.
  • Вендор-лок: Изначально VCPkg был заточен под Visual Studio, и хотя сейчас он вроде как поддерживает и другие компиляторы, но осадочек остался. Да и большинство портов все равно собираются с помощью MSBuild, так что если ты идейный линуксоид или маковод — будь готов к дополнительной боли. А ещё, если проект большой, VCPkg начинает жрать ресурсы как не в себя, и у него срывает крышу.
  • Интеграция: С помощью нехитрых манипуляций, можно заставить CMake подружиться с VCPkg. Но увы, эта дружба весьма шаткая и хрупкая, и не обходится без костылей и подпорок. А если ты используешь другую систему сборки — ну что ж, соболезнуем.
App.png Весьма полезная вещь, позволяет машинам работать с помощью коммандычей
МетаПрограммаDRM (SecuROMStarForceАналоговая дыра) • БагБот (Автоответчик) • Варез (Repack) • ГлюкГуйДонатКопирайт (By design) • ЛогНюкРут (Не работай под рутом) • Спортивное программированиеМегапиксельКомпьютерВерсия 2.0КодОбфускацияСкриншотДатамайнПлагинТекстовый файлБольшие данныеАльфа и бета-тестыТаймстампКэшШаблоныHello WorldНейросетиФайлИнсталляцияВидеоМощный сбой Microsoft 19 июля 2024 годаCrowdStrikeПроект GNUUserscriptDxvkVkd3dБратан хорош давай давай впередКонечный автоматLumen
ФичиБагрепорт12309BSODCookiesEmbrace, extend and extinguishFL StudioSheep.exeWinlogon.exeБубенЗащита от дуракаКостыльМашинный переводПасхальные яйцаСвистелки и перделкиСм. рис. 1Съешь ещё этих мягких французских булокTermuxGNU MetroИндусский кодНескучные обои • Сжатие (За сжатие ДжипегаШакалШкала) • Работает — не трогайРандомайзерPDF (Распознавание PDF) • Дело Google в ФАСЧат-ботXMLМакросКритическая ошибкаФреймворкСинонимайзерSourceТрёхмерное отслеживаниеТрассировка фотоновHZB OcclusionДаунгрейд RTX 4070TressFXАвтопереводчик
ВредоносноеБотнетБрутфорсВинлокЗвонилкаКитайские пингвиныПиксель смертиТроянЧервь МоррисаBonziBuddyMediaGetBrowser hijackingTinderМиссис МажорУтечка буфера обменаWin 10 TweakerОпараш Mozilla FirefoxЯндекс.МузыкаКрэкерБезопасность через умолчаниеGrifter.aviTrojan.Winlock.DeathМиссис МажорСредаDirectStorageDriverpackГенератор случайных чиселDisable Core 0РомхакингDDrawCompatWingetCreateWinGetCoowonЯндекс МессенджерVCPkgSELinux
КомпанииApple / Apple (AppleScript) • GoogleMicrosoftSAPЯндекс
Движения8-bitOpen source (КрасноглазикиЛинуксоиды) • Вирусная сценаДаунгрейдДемосценаМоддингMMDDirectDrawЛагиБлокировка Дискорда в РоссииOpera GXНесоответствие MIME-типаRenoisePygameLs (UNIX)МетаданныеПатчNginxПиксельЭмуляторSearxТамТамMallocСвязный списокSOLID
Офис3DS MAXGIMPGNU EmacsMovie MakerMS Paint • OpenOffice • PowerPointviMicrosoft WordExcelБлокнотФотошопАнтивирус КасперскогоAvast!TikZShareXAlternativeToСкрепышMicrosoft OfficeТекстовый редакторWeChatZoomДиспетчер задачMicrosoft CortanaWinampBallonTranslatorKerish DoctorОбщая ошибкаFirefox: Как один баг сломал весь YouTubeМеждулициеMeld StudioLadybirdCheat Engine
ОСAndroidBSDDOSMenuetOSReactOSWindows (Phone 7Phone 878Vista) / МаздайЛинуксРусская ОСФантом ОСIndex.php
БраузерыInternet ExplorerОпера / Opera • Тормозилла (ОгнелисLolifoxMozilla FirefoxFirefoxFirefox Klar) • Хром (шпионаж) • SafariЯндекс.БраузерУведомления в браузереVivaldiTor-браузерЗосимаФронтенд
ИнтернетAdobe Systems (Flash) • I2PLow Orbit Ion CannonTorTunatic • Чат−клиенты (MirandaQIPSkypeЖабберDiscordVIPole) • HTTPSПрокси-сервер (Proxifier) • Торрент (Magnet-ссылкаΜTorrent) • JavaScriptCSSHTMLБаннермейкерИзменение TTL сетевых пакетовКапчаICQFiddlerViberZonaSteamSillyTavernWickr Me
РазработкаBrainFuckCC++C#JavaHaskellАссемблерChaos ConstructionsBATMySQLGitHubAutoHotKey (AutoHotInterception) • Sublime TextAPK (APKPureзапрет) • BASICPerlPythonPHPФоркUnity3DSAISIPСАПРФлагUTAUФласк макросАуработRaidCallAdobe MingОфициальный™ список кошерных программDevOpsНиколай Дуров
ЛюдиВеб-мастерLovinGODБалмерГейтсГенерал ФейлорДжобсМитникПоттерингде РаадтСпольскиСтоллманТорвальдсШахиджанянAche666Марк ЦукербергЕвгений ПоповДенис КумпонМассовая компьютерная безграмотность
КостылиCygwin • PunkBusterT9WineWishmasterАнтивирусыХакинтошСборки WindowsDenuvoЧистая установкаКалькулятор Consul WarMicrosoft StoreUBlock OriginLightshotAdBlockSearchApp.exeCPU-ZГуглPhotoshopКаптча с пчёламиВзлом Windows через Metasploit
Команды^H^WAlt+F4Ctrl+Alt+Delman/me/quitrm -rf