Стереотипы давно в прошлом. Сегодня Microsoft придерживается концепции «любой разработчик, любое приложение, любая платформа». Сегодня расскажем вам о vcpkg, едином диспетчере библиотек C++, который теперь стал доступен не только для Windows, но и для Linux и Mac OS. Заглядывайте под кат!



Теперь можно мгновенно получить доступ к каталогу vcpkg с библиотеками С++ еще на двух платформах, выполнив для этого всего два простых действия, знакомых по Windows и UWP.

Подключаемый модуль vcpkg прошел долгий путь с момента своей первой презентации на конференции CppCon-2016. Вначале было всего 20 библиотек, но за последние 19 месяцев их число выросло невероятно — более чем до 900! Это неоценимая заслуга замечательных участников нашего сообщества.

Судя по вашим отзывам, именно поддержка систем Linux и Mac оказалась самой востребованной из потенциальных возможностей. И сегодня мы видим, что подключаемый модуль vcpkg стал доступен гораздо большему числу пользователей, упрощая кросс-платформенный доступ к еще большему количеству библиотек С++. Сегодня мы предлагаем вам оценить работу с vcpkg в ОС Windows, Linux или Mac OS.

Использование vcpkg в ОС Linux и Mac


Теперь подключаемый модуль vcpkg поддерживает совместимость с ОС Linux, Mac и другими системами POSIX. Это стало возможным только благодаря личному вкладу нескольких замечательных участников сообщества в разработку.

На момент написания этой публикации в блоге для Linux и Mac насчитывалось свыше 300 библиотек, и мы ожидаем, что скоро их станет гораздо больше. В настоящее время ведется тестирование vcpkg в ОС Ubuntu-LTS 16.04/18.04, мы успешно опробовали этот новый инструмент в Arch, Fedora и FreeBSD.

Начало работы


  1. Клонируйте репозиторий vcpkg: git clone https://github.com/Microsoft/vcpkg
  2. Запустите начальный загрузчик vcpkg: ./bootstrap-vcpkg.sh
  3. После установки vcpkg вы можете создать любую библиотеку, используя следующий синтаксис:
    vcpkg install sdl2

    Будет установлена sdl2:x64-linux (по умолчанию устанавливается стационарная 64-разрядная версия, пока единственная доступная для Linux).

    Результат (.h, .lib) сохраняется в то же дерево папок, и на эту папку следует ссылаться в конфигурации системы управления сборками.
  4. Работа с созданной библиотекой:
    • Если в качестве системы управления сборками применяется CMake, используйте CMAKE_TOOLCHAIN_FILE, чтобы открыть доступ к библиотекам для `find_package()`. Например: cmake .. “-DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake”.
    • Необходимо сделать ссылку на папку vcpkg, в которой содержатся заголовки (\vcpkg\installed\x64-linux\include), а также на папку .lib (\vcpkg\installed\x64-linux\lib), чтобы создать проект, используя сгенерированные библиотеки.





Использование vcpkg для привязки к Linux из Windows посредством WSL


Поскольку WSL является Linux-системой, мы будем использовать ее аналогично Linux. Правильно выполнив настройку один раз, вы будете создавать библиотеки Linux на компьютере с ОС Windows точно так же, как если бы они генерировались в песочнице Linux. Следуйте инструкциям, используемым для установки в Linux. Ознакомьтесь с инструкциями по установке WSL в Windows 10 и настройке с помощью расширения Visual Studio для Linux.



Как показано на снимке экрана выше, к каталогу vcpkg можно осуществлять доступ как из Windows, так и из WSL. В этом примере построение sdl2 и sqlite3 выполнялось в WSL (двоичные коды для Linux); sqlite3 также предназначена и для ОС Windows (Windows dll).

Заключение


Установите диспетчер пакетов vcpkg в ОС Linux или Mac, протестируйте его в своих кросс-платформенных проектах, поделитесь впечатлениями и расскажите, что еще мы можем улучшить.

Ваши отзывы и комментарии действительно очень важны для нас. Чтобы поделиться мнением или задать вопрос, создайте обращение на GitHub или отправьте нам сообщение на адрес электронной почты vcpkg @ microsoft.com. Мы также будем благодарны, если вы найдете пару минут для участия в нашем опросе.

Об авторе


Эрик Митлетт — старший менеджер программ в команде VC++. Он владеет библиотеками (STL, VC Runtime CPPRestSDK FC / ATL и vcpkg). Участвовал в создании и презентации vcpkg 18 месяцев назад. Вначале 20 библиотек, теперь более чем 900. Кроме того, теперь они поддерживаются Linux и Mac. Если у вас есть вопросы, можете написать Эрику: ericmitt @ microsoft.com.

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


  1. Cheater
    29.04.2018 16:40

    Ненужно. В старом mingw есть mingw-get, в новом mingw есть портированный из арча pacman, также есть порт dpkg под винду (wpkg). Но нет, у Microsoft как всегда синдром «not invented here».


    1. Cheater
      29.04.2018 17:11

      Mingw-get — имелся в виду mingwport/mgwport. Mingw-get — установщик пакетов, mgwport — система сборки пакетов.


  1. lost55
    29.04.2018 17:19

    apt/dpkg/rpm, snap, AppImage, flatpak, что еще? vcpkg, ну ок, а в чем плюсы? просто набор c++ библиотек? а зачем им менеджер пакетов? что то я совсем не понимаю.


  1. Revertis
    29.04.2018 17:19
    -2

    В этом примере построение sdl2 и sqlite3 выполнялось...
    Построение? Автор совсем не знает что такое сборка проекта?
    Александр Гуреев
    Пользователь
    А, всё ясно. На IT ресурсе, в блоге одной из крупнейших технологических компаний, пишет обычный пользователь… Куда катится мир? :(


    1. sahsAGU Автор
      29.04.2018 18:26
      +2

      Внизу мы указали контакт автора, можете спросить у него про сборку.
      Ну а должность тут много кто не указывает. :)


      1. sasha1024
        29.04.2018 20:11

        Всё-таки, несмотя на переход на личные оскорбления и неправильный выбор канала (сообщение об ошибке в комментарии, а не в личном сообщении), по сути Revertis, похоже, прав — это называется сборкой, а не построением. Даже Microsoft в Microsoft Terminology Collection пишет «сборка» (хотя в Visual Studio, возможно, по инерции всё ещё использует «построить» — не проверял). И это именно к переводчику, а не к автору.


        1. Revertis
          29.04.2018 21:27

          Да у него и предыдущие «статьи» это машинные переводы сгенерированного текста. Сами посмотрите.
          И я пишу о «переводчике», не об авторе, которым вы пытаетесь прикрыться ;)
          sahsAGU, давайте на вычитку свои тексты тем, кто хоть немного разбирается в IT.


    1. lostpassword
      29.04.2018 18:45

      А вот зря вы язвите. В прошлых версиях MS Visual Studio (за последние не ручаюсь) были именно кнопки «Построить решение», «Перестроить решение».

      Пруфы:
      1. sumanai
        29.04.2018 19:00

        До 2010 как минимум.


      1. easyman
        29.04.2018 19:01

        В Delhi была кнопка "сделать всё" :)


        1. AllexIn
          29.04.2018 19:58

          В пиратском переводе дельфи, вы хотели сказать.


  1. Gorthauer87
    29.04.2018 18:17

    Больше похоже на очень сырой аналог homebrew.


  1. sidorovonline
    29.04.2018 18:31

    Интересно было бы почитать про возможность добавления кастомных пакетов и про возможность изменения стандертных.


  1. iHelper
    29.04.2018 19:46

    очередной выстрел из башни Редмонда по двум зайцам: сразу и Cygwin и Wine. :)


    1. sumanai
      29.04.2018 20:21

      Ортогонально. Подсистема Linux on Windows — да, оно, а менеджер пакетов вещь специфичная, и по сути даже в WSL работает как в чистом Linux, не интегрируясь в Windows (да и не реально это).


  1. iHelper
    29.04.2018 20:40

    и отрекашетит по "менеджерам пакетов", с их git-лапшой. в данном случае .dll или есть, или не нужен.


  1. Tantrido
    29.04.2018 22:21

    Круто! Давно пора! Было непонятно почему под С++ нельзя создать аналог компонентов для C#, Java или npm для JavaScript. Количество программ и область применения C++ выросла бы в разы!


    1. Antervis
      29.04.2018 23:39

      это такой троллинг?


    1. Carburn
      30.04.2018 00:22

      Каких компонентов? Библиотеки и так есть.


      1. VioletGiraffe
        30.04.2018 14:47
        +2

        Библиотеки ничего не стоят, если их нельзя или слишком сложно собрать и интегрировать в свой проект. Библиотеки на С++ делятся на две категории: компилируемые в один клик, и компилируемые с матами за два рабочих дня. К сожалению, вторых больше, и самые нужные обычно в этой категории.
        Менеджер пакетов ой как нужен. Лучше бы один стандартный под каждую ОС, чем кто во что горазд, но хоть так.


    1. Alex_ME
      30.04.2018 12:21
      +2

      Цитата с реддита:


      Welcome to the big leagues, where there are approximately 74 different build systems and a patchwork framework of 28 various package managers, most of which only support a certain platform/environment and are useless outside of it.


  1. Antervis
    29.04.2018 23:35

    поправьте меня если я не прав, но разве vcpkg не аналог conan но без поддержки версионирования/разных компиляторов/разных опций сборки?


  1. nspickiy
    30.04.2018 11:06
    +1

    А как же Chocolatey?


  1. eirnym
    30.04.2018 11:11
    +3

    clickbait заголовок, никак не связанный с содержанием. Дизлайк.


  1. Alex_ME
    30.04.2018 12:19
    +5

    Я не понял, еще один менеджер пакетов под плюсы? Conan, CPM, PACM, SPACK — тысячи их. И даже у Microsoft есть NuGet для C++. Нафига еще один, лучше бы объединились и продвигали какой-нибудь один, например, Conan. Чтобы может быть когда-нибудь у C++ появился бы стандартный менеджер пакетов.