Руководство. Установка и использование пакетов с помощью CMake
Статья
В этом руководстве показано, как создать программу C++ "Hello World", которая использует библиотеку fmt с CMake и vcpkg. Вы установите зависимости, настройте, создадите и запустите простое приложение.
Для пользователей Windows msVC Visual Studio (Компилятор Microsoft Visual C++) является обязательным компилятором для разработки C++.
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 настроен и готов к использованию.
Установка переменных среды с помощью export команды влияет только на текущий сеанс оболочки. Чтобы сделать это изменение постоянным в сеансах, добавьте export команду в скрипт профиля оболочки (например, ~/.bashrc или ~/.zshrc).
set "VCPKG_ROOT=C:\path\to\vcpkg"
set PATH=%VCPKG_ROOT%;%PATH%
Примечание
Настройка переменных среды таким образом влияет только на текущий сеанс терминала. Чтобы сделать эти изменения постоянными во всех сеансах, задайте их на панели переменных среды Windows.
Настройка переменных среды таким образом влияет только на текущий сеанс терминала. Чтобы сделать эти изменения постоянными во всех сеансах, задайте их на панели переменных среды Windows.
Параметр VCPKG_ROOT указывает vcpkg, где расположен экземпляр vcpkg.
Добавьте его, чтобы PATH вы могли выполнять команды vcpkg непосредственно из оболочки.
Создайте каталог проекта.
mkdir helloworld && cd helloworld
3. Добавление зависимостей и файлов проекта
Создайте файл манифеста и добавьте fmt зависимость.
Сначала создайте файл манифеста (vcpkg.json) в каталоге проекта, выполнив vcpkg new команду из helloworld каталога:
vcpkg new --application
Затем добавьте fmt зависимость:
vcpkg add port fmt
Файл vcpkg.json должен выглядеть следующим образом:
{
"dependencies": [
"fmt"
]
}
Это файл манифеста. vcpkg считывает файл манифеста, чтобы узнать, какие зависимости необходимо установить и интегрировать с CMake, чтобы предоставить зависимости, необходимые для проекта.
Файл по умолчанию vcpkg-configuration.json вводит базовые ограничения, указывая минимальные версии зависимостей, которые должен использовать проект. При изменении этого файла выходит за рамки этого руководства, она играет важную роль в определении ограничений версий для зависимостей проекта. Таким образом, несмотря на то, что это не обязательно для этого руководства, рекомендуется добавить vcpkg-configuration.json в управление версиями, чтобы обеспечить согласованность версий в разных средах разработки.
Создайте файлы проекта.
CMakeLists.txt Создайте файл со следующим содержимым:
Теперь давайте разберем, что делает каждая строка в 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 и не должно распространяться на другие зависимые проекты.
helloworld.cpp Создайте файл со следующим содержимым:
#include <fmt/core.h>
int main()
{
fmt::print("Hello World!\n");
return 0;
}
В этом helloworld.cpp файле <fmt/core.h> заголовок включен для использования библиотеки fmt . Затем main() функция вызывает fmt::print() сообщение "Hello World!" в консоль.
4. Сборка и запуск проекта
Запуск конфигурации CMake
CMake может автоматически связывать библиотеки, установленные vcpkg, если CMAKE_TOOLCHAIN_FILE задано использование пользовательской цепочки инструментов vcpkg. Это может быть компилировано с помощью предварительно настроенных файлов CMake.
Файл CMakePresets.json содержит один предустановку с именем vcpkg, который задает CMAKE_TOOLCHAIN_FILE переменную. Файл CMakeUserPresets.json задает VCPKG_ROOT переменную среды, чтобы указать абсолютный путь, содержащий локальную установку vcpkg. Рекомендуется не проверять CMakeUserPresets.json системы управления версиями.
Наконец, настройте сборку с помощью CMake:
cmake --preset=default
Сборка проекта
Запустить:
cmake --build build
Выполнение приложения
Наконец, запустите исполняемый файл, чтобы увидеть приложение в действии:
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о vcpkg
vcpkg — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Azure HPC — это специально разработанная облачная возможность для рабочей нагрузки HPC и ИИ, использующая современные отраслевые процессоры и обмен данными по сети InfiniBand для обеспечения максимальной производительности, масштабируемости и ценности приложений. Azure HPC позволяет реализовывать инновации, повышать продуктивность и развивать гибкость бизнеса за счет высокодоступного набора технологий HPC и ИИ с возможностью их динамического распределения в соответствии с изменением коммерческих и техническ