Как установить vcpkg в Visual Studio Code

Обновлено: 21.11.2024

Когда я начинаю использовать язык программирования, у меня всегда возникают следующие вопросы:

  • Как собрать/запустить программу?
  • Как запускать тесты?
  • Как установить зависимости?
  • Как мне интегрировать все это в мой текстовый редактор?

Некоторые языки, такие как Go, дают простые ответы на эти вопросы: go build ./. , иди тест ./. , получить , установить официальное расширение Go для вашего редактора. Сделанный. Но, конечно, в случае с C++ все обстоит так. разные 🙃.

Мир C++ гораздо более фрагментирован, существует множество вариантов инструментов сборки и мета-сборки, различные среды тестирования (каждая со своим собственным средством запуска тестов), множество способов управления зависимостями и т. д. быть сложной для людей, которые только хотят начать с языка, и поскольку я знаю, что забуду, как все работает, в этой статье я задокументирую, что я сделал, чтобы получить полностью рабочую среду, которая отвечает на все мои вопросы простым языком. и последовательным образом. В конце этого руководства мы сможем создавать и запускать тесты всего одним щелчком мыши (или командной строкой, если вам это нравится).

Популярность инструментов может сильно варьироваться от года к году, например, решения для управления зависимостями по-прежнему конкурируют друг с другом, и постоянно появляются новые, поэтому я хочу четко указать, что этот документ является моей установкой на 2020 год. , надеюсь, в будущем он останется вечным, но я бы не стал на него слишком сильно полагаться.

Что мы будем делать:

  • Настройте и используйте vcpkg для загрузки, сборки и установки зависимостей с открытым исходным кодом, таких как catch2 (для наших тестов) и fmt (для нашего кода).
  • Используйте CMake для управления сборками и выполнения тестов.
  • Настройте Visual Studio Code таким образом, чтобы мы могли управлять нашими сборками и тестами непосредственно из редактора, а автодополнение для зависимостей было установлено через vcpkg .

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

Требования

Чтобы следовать этому руководству, вам понадобится набор компиляторов C++ и git.

Если вы работаете в среде UNIX, которая, скорее всего, будет gcc или clang , их можно установить из диспетчера пакетов вашей системы.

Если вы используете Windows, вы можете установить компилятор Microsoft. Для этого вам необходимо установить либо Visual Studio (не Visual Studio Code), либо, если вы не хотите устанавливать полную IDE, вы можете установить только инструменты сборки (выберите «Инструменты сборки для Visual Studio 2019»).

Еще один вариант, который не всегда хорошо известен для Windows: в Windows 10 есть функция под названием "WSL", которая позволяет запускать подсистему Linux. Это упрощает установку gcc или clang и работу с кроссплатформенными приложениями без необходимости переключения на другую операционную систему. Это фантастическая функция, я не буду описывать ее здесь, но стоит знать, что она существует. Ознакомьтесь с документацией Microsoft, если вам это интересно. И Visual Studio, и Visual Studio Code поддерживают WSL.

vcpkg , решение Microsoft для управления библиотеками C++

vcpkg — одно из последних дополнений к списку существующих решений для управления зависимостями C++. Его использование довольно простое и должно быть знакомо людям, которые использовали менеджеры пакетов, такие как NPM. Однако две вещи удивили меня, когда я впервые попробовал его использовать:

  1. Вы не устанавливаете его обычным способом, вместо загрузки инструмента командной строки, который вы добавляете в наш PATH, а затем запускаете его из каталога вашего проекта, вам нужно сделать git clone репозиторий vcpkg из GitHub, а затем создайте инструмент командной строки с помощью скрипта начальной загрузки и используйте оттуда полученный двоичный файл vcpkg.
  2. Пакеты устанавливаются непосредственно в каталог клонированного репозитория, а это означает, что все установленное является глобальным, но вы также можете клонировать репозиторий несколько раз в разные каталоги, если это проблема.

Давайте посмотрим, как это настроить.

Во-первых, убедитесь, что вы находитесь в каталоге, в котором вы хотите разместить командный инструмент (команда vcpkg рекомендует C:\src\vcpkg или C:\dev\vcpkg , что, на мой взгляд, немного странно, я лично клонируйте его в мой каталог C:\Users\Sam\Development.Просто выберите то, что вам подходит). Затем клонируйте репозиторий:

И. Это оно. Инструмент сейчас компилируется, через некоторое время вы получите двоичный файл vcpkg (vcpkg.exe в Windows).

Теперь давайте установим две библиотеки с открытым исходным кодом, Catch2 и fmt.

Сначала мы можем увидеть, что доступно для catch, чтобы иметь представление о версии и имени зависимости, которое мы должны использовать:

Как мы видим, catch ссылается на предыдущую версию библиотеки, которая теперь устарела, и мы должны использовать имя catch2, если хотим получить последнюю версию.

Важное примечание: по умолчанию vcpkg установит x86-версию библиотеки, что может вызвать проблемы при сборке для x64. Лучше всегда явно указывать «триплет», в моем случае это catch2:x64-windows . Если в какой-то момент CMake сообщает вам, что не удается найти установленную библиотеку, обязательно проверьте, установили ли вы ее для правильной архитектуры и платформы! Я потерял довольно много времени на отладку своей установки, прежде чем понял это. Лично я предпочел бы, чтобы это заставляло меня всегда указывать тройку, чтобы избежать подобных ошибок.

vcpkg здесь действительно полезен, так как он прямо говорит нам, что нам нужно для использования библиотеки из CMake, что мы и будем делать. Если в какой-то момент вы захотите снова увидеть цели CMake, просто снова запустите команду установки для того же триплета библиотеки.

Примечание: одна важная деталь. В случае fmt vcpkg выводит ссылки как fmt::fmt, так и fmt::fmt-header-only, но на самом деле нам следует использовать только один или другой, а не оба. Я не видел этой проблемы для других библиотек.

И все, наши две зависимости теперь установлены. Если вам интересно, вы можете проверить установленный каталог, расположенный в каталоге клонов vcpkg, где находятся исходный код и заголовки библиотек.

CMake, система мета-сборки

CMake сам по себе зверь. Я не буду вдаваться слишком далеко в его детали, потому что это может показаться ошеломляющим довольно быстро. Итак, давайте определим, для чего мы хотим его использовать:

  1. Определите основную цель, которая будет нашим основным двоичным файлом. Он должен быть связан с исходным кодом нашего проекта и библиотекой fmt.
  2. Определите цель run_tests, которая будет запускать наши тесты. Он должен быть связан с нашим проектом и исходным кодом теста, а также с библиотекой catch2.
  3. После этого мы сможем создавать цели и запускать тесты всего одной командой.

Первое, что нужно сделать, это, конечно же, установить cmake . Просто загрузите установщик с веб-сайта или установите его с помощью менеджера пакетов вашей платформы. После этого у вас должен быть инструмент командной строки cmake, доступный в вашем терминале.

Затем перейдите в каталог вашего проекта, который, как я полагаю, выглядит примерно так:

Нам нужно добавить файл CMakeLists.txt в каталог нашего проекта со следующим содержимым:

Как видите, библиотеки find_package и target_link_libraries основаны на выводе vcpkg, который мы получили после установки fmt и catch2 .

Примечание. CMake — невероятно гибкая система, которую можно использовать для настройки параметров сборки практически под любые требования. Но за эту гибкость приходится платить сложностью. Что я хочу сделать в этом руководстве, так это представить минимум, необходимый для начала работы с вашим проектом, а затем вы можете настроить конфигурацию сборки в соответствии с вашими конкретными потребностями. Секрет того, как не перегружаться, заключается в том, чтобы начать с чего-то простого и работающего, а затем постепенно добавлять дополнительные функции по мере необходимости.

Если вы хотите глубже погрузиться в CMake, я рекомендую ознакомиться с CGold: Руководство автостопом по CMake.

Теперь мы можем запустить CMake из командной строки, чтобы настроить, а затем построить наши цели. В первый раз потребуется некоторое время, так как CMake должен определить некоторые свойства, например, какой компилятор использовать. Хотя в следующий раз, когда вы вызовете cmake, все будет кэшировано, это должно быть быстро.

  • -B build указывает, что мы хотим использовать ./build в качестве каталога сборки CMake
  • -С . указываем путь к нашим исходникам
  • -DCMAKE_TOOLCHAIN_FILE=C:/Users/Sam/Development/vcpkg/scripts/buildsystems/vcpkg.cmake — это чудо, позволяющее CMake узнать об установленных библиотеках vcpkg. Путь должен совпадать с местом установки vcpkg .

Если все прошло хорошо, отлично, в основном все готово.

  1. что вы установили библиотеку с правильными триплетами. Это было одним из главных источников моего разочарования.
  2. что указанный вами путь к -DCMAKE_TOOLCHAIN_FILE= указывает на корень vcpkg, в который вы установили библиотеку
  3. что вы не ошиблись в названии библиотеки в CMakeLists.txt
  4. что вы используете оператор CMake, упомянутый vcpkg, при запуске vcpkg install
  5. <ли>. Вывод варьируется от библиотеки к библиотеке, поэтому обязательно трижды проверьте этот (например, sqlite3 требует find_package(unofficial-sqlite3 CONFIG REQUIRED) )
  6. удалите каталог сборки и повторите попытку

Хорошо, давайте предположим, что этап настройки прошел успешно, теперь мы можем создать наши цели. Ваш вывод, конечно, будет отличаться, если вы используете компилятор, отличный от моего.

Запускайте тесты через ctest

CMake также поставляется с CTest, инструментом, который можно использовать для запуска тестов более общим способом.Его нужно запускать из каталога сборки CMake.

Настройка кода Visual Studio для работы с IDE

Я предполагаю, что у вас уже установлен Visual Studio Code и вы уже знакомы с ним, я буду говорить только о шагах, необходимых для интеграции CMake и vcpkg.

Нам нужно 4 расширения:

    от Майкрософт. Подсветка синтаксиса и intellisense для C++. по твкс. Подсветка синтаксиса и intellisense для CMake. также от Майкрософта. После установки и включения вы получаете возможность настраивать, создавать и запускать цели CMake. Он также поставляется с приятным графическим интерфейсом, интегрированным в VSCode. Мате Пек. Дает нам поддержку тестов непосредственно в VSCode, а также с отличной интеграцией графического интерфейса.

Установите их прямо из VSCode. Я рекомендую включать только «C++ TestMate» и «CMake Tools» для вашей текущей рабочей области, поскольку они имеют смысл только в некоторых конкретных проектах C++ и могут мешать вам, если проект определяется как основанный на CMake, когда это не так (у меня было такая ситуация при работе над проектами Arduino). Просто включайте их для рабочей области каждый раз при запуске нового проекта CMake.

По умолчанию они уже должны работать правильно, и если вы следовали остальной части этого руководства, у вас должно получиться что-то вроде этого:

Нам нужно будет сделать лишь несколько настроек, чтобы они хорошо работали с vcpkg. Для этого добавьте в проект файл .vscode/settings.json:

И укажите "CMake Tools" в качестве поставщика автозаполнения в настройках C++ в файле .vscode/c_cpp_properties.json :

Заключение

Наконец-то мы закончили! Теперь мы можем управлять нашими зависимостями через vcpkg , определять наши сборки из нашего файла CMake, а также настраивать, создавать и запускать все наши цели и тесты из Visual Studio Code для необычного опыта разработки. И все это только с использованием проектов с открытым исходным кодом :)

vcpkg — это находка, которая делает работу с зависимостями и CMake НАМНОГО ЛУЧШЕ, чем все, что я пробовал раньше! Больше никаких уродливых скриптов CMake для загрузки тестовой среды и запуска, а также некоторых простых зависимостей! Удивительно видеть недавние разработки людей из Microsoft, количество времени и энергии, затраченное на улучшение опыта разработчиков C++ с помощью вкладов с открытым исходным кодом, достойно восхищения.

Мне потребовалось довольно много времени, чтобы получить то, чем я доволен, я провел несколько часов, борясь с CMake и vcpkg, читая их документацию, тестируя настройки и плагины VSCode и т. д. Надеюсь, это поможет другим, кто ищет какое-то руководство! ✌

Откройте консоль PowerShell (Win + x, затем выберите Windows PowerShell) и перейдите в каталог, в котором будет находиться каталог vcpkg.

Запустите Windows PowerShell от имени администратора (Win + x, затем выберите Windows PowerShell (admin)) и откройте предыдущий каталог

Закройте консоль администратора PowerShell и вернитесь к консоли без прав администратора. Введите следующие строки, чтобы найти и установить пакет sqlite.

В конфигурации, отличной от английского, вам может потребоваться установить английский пакет для Visual Studio. Для этого запустите установщик Visual Studio. Проверьте вкладку языка и добавьте английский. После установки английского пакета перезапустите команду .\vcpkg install sqlite3:x64-windows

Нажмите на изображение, чтобы отобразить его на весь экран

  • Список установленных библиотек: ./vcpkg list
  • Обновите vcpkg. Перейдите в каталог vcpkg, введите git pull и снова запустите загрузчик ( .\bootstrap-vcpkg.bat )
  • Удалите vcpkg. В каталоге vcpkg выполните команду ./vcpkgintegrate remove, а затем удалите каталог vcpkg.
  • Подробнее. Ознакомьтесь с документацией vcpkg

Создать отладочную версию

Создайте каталог для размещения приложения и запустите VSCode оттуда.

Убедитесь, что в VSCode установлены расширения C/C++, CMake и CMake Tools. Откройте панель расширений (CTRL + SHIFT + x) и проверьте, чего не хватает. См. ниже:

Скопируйте и вставьте приведенный ниже код в файл main.cpp и сохраните его.

После этого измените VSCode Settings.json. Вам придется сделать это один раз. Именно так мы сообщаем VS Code о CMake.

В любом случае, чтобы отредактировать файл Settings.json, нажмите CTRL + запятая

Чтобы переключиться в текстовый режим, щелкните первый из трех значков в правом верхнем углу (тот, который выглядит как файл)

Чтобы убедиться, вот содержимое моего файла Settings.json в том виде, в каком оно есть на сегодняшний день.

CTRL + SHIFT + P, введите CMake и выберите "Быстрый запуск CMake".

Когда вас попросят выбрать цель, выберите выпуск Visual Studio Community 2019 — например, amd64. Помните, изначально мы установили sqlite3:x64-windows

Вот содержимое сгенерированного файла CMakeLists.txt, который вы получите

Это следует упростить и изменить следующим образом. Обратите внимание на табуляцию перед путями: c:/Users/phili/Documents/…

Позже, если проекту потребуются дополнительные библиотеки, просто добавьте их имена после sqlite3 и вставьте между ними пробел.

Кажется, все настроено. CTRL + SHIFT + P, затем введите CMake и выберите CMake: Build. Вы также можете нажать F7, что намного быстрее.

Если все прошло хорошо, у вас должен быть каталог Debug, содержащий отладочную версию TestSQL.exe.

Пришло время отладить наш код. Установите точку останова в строке 5 и нажмите F5. При появлении запроса выберите C++(Windows).

Позже выберите cl.exe

Вот содержимое исходного файла launch.json, который вы можете получить.

Теперь это измененная версия, в которой preLaunchTask прокомментирован и $ заменен на /build/Debug/TestSQL.exe. Действительно, здесь был сгенерирован исполняемый файл.

Нажмите F5. Если все работает как положено, программа должна остановиться на строке 5. С этого момента вы должны знать, что делать 😁

Создать выпускную версию

В нижней части VSCode нажмите CMake: [Отладка]: Готово

И выберите Освободить во всплывающем списке.

Если вы хотите изменить комплект (Visual Studio 2019 Release — мы изначально выбрали amd64), в нижней части окна VS Code щелкните строку состояния и выберите другой комплект компилятора. Однако, если вы выберете выпуск Visual Studio 2019 — например, x86, убедитесь, что вы установили соответствующую библиотеку с помощью vcpkg. В нашем случае пока что у нас есть только версия библиотеки для x64, а не версия для x86. Возможно, вам также придется обновить содержимое файла CMakeLists.txt. Помните, до сих пор мы писали что-то вроде:

В любом случае, нажмите F7, чтобы собрать релизную версию. В конце сборки должен быть доступен каталог Release с совершенно новым TestSQL.exe.

На французской клавиатуре нажмите CTRL + ù, чтобы открыть новый терминал, и введите строку ниже, чтобы запустить приложение.

Заключение

vcpkg отлично подходит. Интеграция в Visual Studio еще более плавная, чем в VSCode. Как бы то ни было, vcpkg элегантно решает одну из самых надоедливых задач разработчика: получить библиотеки и обеспечить их быструю интеграцию с нашей цепочкой инструментов для компиляции.

Я надеюсь, что эта страница ускорит ваше начало работы с vcpkg и VSCode в Windows. Не стесняйтесь добавлять комментарии, чтобы помочь мне улучшить эту статью и помочь другим.

Установка vcpkg — это двухэтапный процесс: сначала клонируйте репозиторий, затем запустите сценарий начальной загрузки, чтобы создать двоичный файл vcpkg. Репозиторий можно клонировать где угодно, и он будет включать двоичный файл vcpkg после начальной загрузки, а также любые библиотеки, которые устанавливаются из командной строки. Рекомендуется клонировать vcpkg как подмодуль для проектов CMake, но устанавливать его глобально для проектов MSBuild. При глобальной установке мы рекомендуем использовать короткий путь установки, например: C:\src\vcpkg или C:\dev\vcpkg , поскольку в противном случае вы можете столкнуться с проблемами пути для некоторых систем сборки портов.

Шаг 1. Клонируйте репозиторий vcpkg

Перед этим убедитесь, что вы находитесь в каталоге, в который хотите установить инструмент.

Шаг 2. Запустите скрипт начальной загрузки для сборки vcpkg

vcpkg install [пакеты для установки]

vcpkg интегрировать установить

После этого вы можете создать новый проект или открыть существующий в IDE. Все установленные библиотеки уже должны обнаруживаться IntelliSense и использоваться в коде без дополнительной настройки.

cmake -B [каталог сборки] -S . -DCMAKE_TOOLCHAIN_FILE=[путь к vcpkg]/scripts/buildsystems/vcpkg.cmake

Затем создайте с помощью:

cmake --build [каталог сборки]

В CMake вам нужно будет использовать find_package() для ссылки на библиотеки в ваших файлах Cmakelists.txt.

Установка vcpkg — это двухэтапный процесс: сначала клонируйте репозиторий, затем запустите сценарий начальной загрузки, чтобы создать двоичный файл vcpkg. Репозиторий можно клонировать где угодно, и он будет включать двоичный файл vcpkg после начальной загрузки, а также любые библиотеки, которые устанавливаются из командной строки. Для большей гибкости рекомендуется клонировать vcpkg как подмодуль в существующий проект, если это возможно.

Шаг 1. Клонируйте репозиторий vcpkg

Перед этим убедитесь, что вы находитесь в каталоге, в который хотите установить инструмент.

Шаг 2. Запустите скрипт начальной загрузки для сборки vcpkg

vcpkg install [пакеты для установки]

cmake -B [каталог сборки] -S . -DCMAKE_TOOLCHAIN_FILE=[путь к vcpkg]/scripts/buildsystems/vcpkg.cmake

Затем создайте с помощью:

cmake --build [каталог сборки]

В CMake вам потребуется find_package() для ссылки на библиотеки в ваших файлах Cmakelists.txt.

Установка vcpkg — это двухэтапный процесс: сначала клонируйте репозиторий, затем запустите сценарий начальной загрузки, чтобы создать двоичный файл vcpkg. Репозиторий можно клонировать где угодно, и он будет включать двоичный файл vcpkg после начальной загрузки, а также любые библиотеки, которые устанавливаются из командной строки. Для большей гибкости рекомендуется клонировать vcpkg как подмодуль в существующий проект, если это возможно.

Шаг 1. Клонируйте репозиторий vcpkg

Перед этим убедитесь, что вы находитесь в каталоге, в который хотите установить инструмент.

Во-первых, нам нужно знать, под каким именем SQLite находится в дереве портов. Для этого мы запустим команду поиска и проверим вывод:

Глядя на список, мы видим, что порт называется sqlite3. Вы также можете запустить команду поиска без аргументов, чтобы увидеть полный список пакетов.

Установка выполняется так же просто, как с помощью команды install.

Мы можем проверить, что sqlite3 был успешно установлен для рабочего стола x86 Windows, выполнив команду list.

Чтобы установить для других архитектур и платформ, таких как универсальная платформа Windows или x64 Desktop, вы можете добавить к имени пакета суффикс: .

См. триплет справки .\vcpkg для всех поддерживаемых целей.

Шаг 2. Используйте

Проект VS/MSBuild (интеграция для всего пользователя)

Рекомендуемый и наиболее продуктивный способ использования vcpkg – это общепользовательская интеграция, делающая систему доступной для всех проектов, которые вы создаете. Интеграция на уровне пользователя будет запрашивать доступ администратора при первом использовании на данном компьютере, но впоследствии она больше не требуется, и интеграция настраивается для каждого пользователя.

Примечание. Вам потребуется перезапустить Visual Studio или выполнить сборку, чтобы обновить Intellisense с учетом изменений.

Теперь вы можете просто использовать File -> New Project в Visual Studio, и библиотека будет доступна автоматически. Для SQLite вы можете попробовать их образец C/C++.

Чтобы удалить интеграцию для вашего пользователя, вы можете использовать .\vcpkg интегрировать удалить .

CMake (файл набора инструментов)

Лучший способ использовать установленные библиотеки с cmake — через файл набора инструментов scripts\buildsystems\vcpkg.cmake . Чтобы использовать этот файл, вам просто нужно добавить его в командную строку CMake как:
-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake .

Если вы используете CMake через Open Folder с Visual Studio, вы можете определить CMAKE_TOOLCHAIN_FILE, добавив раздел «переменные» в каждую из ваших конфигураций CMakeSettings.json:

Примечание. Может потребоваться удалить папку кэша CMake для каждой измененной конфигурации, чтобы принудительно выполнить полную регенерацию. В меню CMake в разделе «Кэш» ( ) вы найдете «Удалить папки кэша» .

Теперь давайте создадим простой проект CMake с основным файлом.

Затем мы создаем наш проект обычным способом CMake:

Примечание. Правильный sqlite3.dll автоматически копируется в выходную папку при сборке для x86-windows. Вам нужно будет распространять его вместе с вашим приложением.

Обработка библиотек без встроенной поддержки cmake

В отличие от других платформ, мы не добавляем автоматически каталог include\ в вашу строку компиляции по умолчанию. Если вы используете библиотеку, не обеспечивающую интеграцию с CMake, вам потребуется явно искать файлы и добавлять их самостоятельно с помощью find_path() и find_library() .

Читайте также: