Руководство. Установка и использование пакетов с помощью 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 настроен и готов к использованию.
2. Настройка проекта
Настройте переменную среды
VCPKG_ROOT
.export VCPKG_ROOT=/path/to/vcpkg export PATH=$VCPKG_ROOT:$PATH
Примечание.
Установка переменных среды с помощью
export
команды влияет только на текущий сеанс оболочки. Чтобы сделать это изменение постоянным в сеансах, добавьтеexport
команду в скрипт профиля оболочки (например,~/.bashrc
или~/.zshrc
).set "VCPKG_ROOT=C:\path\to\vcpkg" set PATH=%VCPKG_ROOT%;%PATH%
Примечание.
Настройка переменных среды таким образом влияет только на текущий сеанс терминала. Чтобы сделать эти изменения постоянными во всех сеансах, задайте их на панели переменных среды Windows.
$env:VCPKG_ROOT = "C:\path\to\vcpkg" $env:PATH = "$env:VCPKG_ROOT;$env:PATH"
Примечание.
Настройка переменных среды таким образом влияет только на текущий сеанс терминала. Чтобы сделать эти изменения постоянными во всех сеансах, задайте их на панели переменных среды 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
Создайте файл со следующим содержимым: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
и не должно распространяться на другие зависимые проекты.
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.Создайте следующие файлы в каталоге
helloworld
: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
системы управления версиями.Наконец, настройте сборку с помощью CMake:
cmake --preset=default
Сборка проекта
Запустить:
cmake --build build
Выполнение приложения
Наконец, запустите исполняемый файл, чтобы увидеть приложение в действии:
./build/HelloWorld Hello World!
.\build\HelloWorld.exe Hello World!