Руководство. Установка и использование пакетов с CMake в Visual Studio
В этом руководстве показано, как создать программу C++ Hello World, которая использует библиотеку fmt
с CMake, vcpkg и Visual Studio. Вы установите зависимости, настройте, создадите и запустите простое приложение.
Необходимые компоненты
- Visual Studio с рабочей нагрузкой разработки C++ и компонентом CMake
- Git
1. Настройка vcpkg
Клонирование репозитория
Первым шагом является клонирование репозитория vcpkg из GitHub. Репозиторий содержит скрипты для получения исполняемого файла vcpkg и реестра курируемых библиотек с открытым исходным кодом, поддерживаемых сообществом vcpkg. Для этого выполните следующую команду:
git clone https://github.com/microsoft/vcpkg.git
Управляемый реестр vcpkg — это набор из более чем 2000 библиотек с открытым исходным кодом. Эти библиотеки были проверены конвейерами непрерывной интеграции vcpkg для совместной работы. Хотя репозиторий vcpkg не содержит исходный код для этих библиотек, он содержит рецепты и метаданные для сборки и установки их в систему.
Запуск скрипта начальной загрузки
Теперь, когда вы клонировали репозиторий vcpkg, перейдите к
vcpkg
каталогу и выполните скрипт начальной загрузки:cd vcpkg && bootstrap-vcpkg.bat
cd vcpkg; .\bootstrap-vcpkg.bat
cd vcpkg && ./bootstrap-vcpkg.sh
Скрипт начальной загрузки выполняет проверки готовности и загружает исполняемый файл vcpkg.
Вот и все! vcpkg настроен и готов к использованию.
2. Настройка проекта Visual Studio
Создание проекта Visual Studio
- Создание проекта в Visual Studio с помощью шаблона "Проект CMake"
Снимок экрана: пользовательский интерфейс Visual Studio для создания проекта CMake в Visual Studio
- Присвойте проекту имя helloworld
- Установите флажок "Разместить решение и проект в одном каталоге".
- Нажмите кнопку "Создать"
Снимок экрана: пользовательский интерфейс Visual Studio для именования проекта CMake и нажатия кнопки "Создать".
Настройте переменную среды
VCPKG_ROOT
.Примечание.
Настройка переменных среды таким образом влияет только на текущий сеанс терминала. Чтобы сделать эти изменения постоянными во всех сеансах, задайте их на панели переменных среды Windows.
Откройте встроенное окно PowerShell разработчика в Visual Studio.
Снимок экрана: пользовательский интерфейс Visual Studio для встроенного окна разработчика PowerShell
Выполните следующие команды:
$env:VCPKG_ROOT="C:\path\to\vcpkg" $env:PATH="$env:VCPKG_ROOT;$env:PATH"
Снимок экрана: пользовательский интерфейс Visual Studio для встроенного окна разработчика PowerShell, в котором показано, как настроить VCPKG_ROOT и добавить его в PATH.
Откройте командную строку разработчика в Visual Studio.
Снимок экрана: пользовательский интерфейс Visual Studio для командной строки разработчика.
Выполните следующие команды:
set "VCPKG_ROOT=C:\path\to\vcpkg" set PATH=%VCPKG_ROOT%;%PATH%
Снимок экрана: командная строка разработчика Visual Studio, показывающая, как настроить VCPKG_ROOT и добавить ее в PATH.
Параметр
VCPKG_ROOT
помогает Visual Studio найти экземпляр vcpkg. Добавьте его, чтобыPATH
вы могли выполнять команды vcpkg непосредственно из оболочки.Создайте файл манифеста и добавьте зависимости.
Выполните следующую команду, чтобы создать файл манифеста vcpkg (
vcpkg.json
):vcpkg new --application
Команда
vcpkg new
добавляетvcpkg.json
файл иvcpkg-configuration.json
файл в каталог проекта.fmt
Добавьте пакет в качестве зависимости:vcpkg add port fmt
Теперь должно содержаться следующее
vcpkg.json
:{ "dependencies": [ "fmt" ] }
Это файл манифеста. vcpkg считывает файл манифеста, чтобы узнать, какие зависимости необходимо установить и интегрировать с CMake, чтобы предоставить зависимости, необходимые для проекта.
vcpkg-configuration.json
Созданный файл представляет базовый план, который устанавливает минимальные ограничения версий для зависимостей проекта. Изменение этого файла выходит за рамки этого руководства. Хотя это не применимо в этом руководстве, рекомендуется сохранитьvcpkg-configuration.json
файл под управлением версиями, чтобы обеспечить согласованность версий в разных средах разработки.
3. Настройка файлов проекта
Измените файл
helloworld.cpp
.Замените содержимое
helloworld.cpp
следующим кодом:#include <fmt/core.h> int main() { fmt::print("Hello World!\n"); return 0; }
Этот исходный
<fmt/core.h>
файл содержит заголовок, который является частью библиотекиfmt
. Функцияmain()
вызываетfmt::print()
сообщение "Hello World!" в консоль.CMakePresets.json
Настройте файл.CMake может автоматически связывать библиотеки, установленные vcpkg, если
CMAKE_TOOLCHAIN_FILE
задано использование пользовательской цепочки инструментов vcpkg. Это может быть компилировано с помощью предварительно настроенных файлов CMake.Измените
CMakePresets.json
содержимое, соответствующее приведенному ниже:{ "version": 2, "configurePresets": [ { "name": "vcpkg", "generator": "Ninja", "binaryDir": "${sourceDir}/build", "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" } } ] }
Создайте
CMakeUserPresets.json
следующее содержимое:{ "version": 2, "configurePresets": [ { "name": "default", "inherits": "vcpkg", "environment": { "VCPKG_ROOT": "<path to vcpkg>" } } ] }
Файл
CMakePresets.json
содержит один предустановку с именем vcpkg, который задаетCMAKE_TOOLCHAIN_FILE
переменную. ФайлCMakeUserPresets.json
задаетVCPKG_ROOT
переменную среды, чтобы указать абсолютный путь, содержащий локальную установку vcpkg. Рекомендуется не проверятьCMakeUserPresets.json
системы управления версиями.Измените файл
CMakeLists.txt
.Замените содержимое файла
CMakeLists.txt
приведенным ниже кодом.cmake_minimum_required(VERSION 3.10) project(HelloWorld) find_package(fmt CONFIG REQUIRED) add_executable(HelloWorld helloworld.cpp) target_link_libraries(HelloWorld PRIVATE fmt::fmt)
Теперь давайте разберем, что делает каждая строка в
CMakeLists.txt
файле:cmake_minimum_required(VERSION 3.10)
: указывает, что минимальная версия CMake, необходимая для сборки проекта, — 3.10. Если версия CMake, установленная в вашей системе, ниже этой, сборка завершается ошибкой.project(HelloWorld)
: задает имя проекта "HelloWorld".find_package(fmt CONFIG REQUIRED)
: ищет библиотекуfmt
с помощью файла конфигурации CMake. КлючевоеREQUIRED
слово гарантирует, что ошибка создается, если пакет не найден.add_executable(HelloWorld helloworld.cpp)
: добавляет исполняемый целевой объект с именем HelloWorld, созданный из исходного файлаhelloworld.cpp
.target_link_libraries(HelloWorld PRIVATE fmt::fmt)
: указывает, что исполняемыйHelloWorld
файл должен ссылаться на библиотекуfmt
. КлючевоеPRIVATE
слово указывает, чтоfmt
требуется только для созданияHelloWorld
и не должно распространяться на другие зависимые проекты.
4. Сборка и запуск проекта
Выполните сборку проекта.
Нажмите,
Ctrl+Shift+B
чтобы создать проект в Visual Studio.Запустите приложение.
Наконец, запустите исполняемый файл:
Снимок экрана: пользовательский интерфейс Visual Studio для запуска исполняемого файла.
Вы должны увидеть выходные данные:
Снимок экрана: выходные данные программы : "Hello World!"
Следующие шаги
Дополнительные сведения см vcpkg.json
. в нашей справочной документации: