Поделиться через


Руководство. Установка и использование пакетов с помощью CMake

В этом руководстве показано, как создать программу C++ "Hello World", которая использует библиотеку fmt с CMake и vcpkg. Вы установите зависимости, настройте, создадите и запустите простое приложение.

Необходимые компоненты

  • Терминал
  • Компилятора C++
  • CMake.
  • Git

Примечание.

Для пользователей Windows msVC Visual Studio (Компилятор Microsoft Visual C++) является обязательным компилятором для разработки C++.

1. Настройка vcpkg

  1. Клонирование репозитория

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

    git clone https://github.com/microsoft/vcpkg.git
    

    Управляемый реестр vcpkg — это набор из более чем 2000 библиотек с открытым исходным кодом. Эти библиотеки были проверены конвейерами непрерывной интеграции vcpkg для совместной работы. Хотя репозиторий vcpkg не содержит исходный код для этих библиотек, он содержит рецепты и метаданные для сборки и установки их в систему.

  2. Запуск скрипта начальной загрузки

    Теперь, когда вы клонировали репозиторий vcpkg, перейдите к vcpkg каталогу и выполните скрипт начальной загрузки:

    cd vcpkg && bootstrap-vcpkg.bat
    
    cd vcpkg; .\bootstrap-vcpkg.bat
    
    cd vcpkg && ./bootstrap-vcpkg.sh
    

    Скрипт начальной загрузки выполняет проверки готовности и загружает исполняемый файл vcpkg.

    Вот и все! vcpkg настроен и готов к использованию.

2. Настройка проекта

  1. Настройте переменную среды 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 непосредственно из оболочки.

  2. Создайте каталог проекта.

    mkdir helloworld && cd helloworld
    

3. Добавление зависимостей и файлов проекта

  1. Создайте файл манифеста и добавьте 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 в управление версиями, чтобы обеспечить согласованность версий в разных средах разработки.

  2. Создайте файлы проекта.

    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. Сборка и запуск проекта

  1. Запуск конфигурации 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
    
  2. Сборка проекта

    Запустить:

    cmake --build build
    
  3. Выполнение приложения

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

    ./build/HelloWorld
    
    Hello World!
    
    .\build\HelloWorld.exe
    
    Hello World!
    

Следующие шаги