Руководство. Установка и использование пакетов с CMake в Visual Studio

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

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

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. Настройка проекта Visual Studio

  1. Создание проекта Visual Studio

    • Создание проекта в Visual Studio с помощью шаблона "Проект CMake"

    создание нового проекта CMake

    Снимок экрана: пользовательский интерфейс Visual Studio для создания проекта CMake в Visual Studio

    • Присвойте проекту имя helloworld
    • Установите флажок "Разместить решение и проект в одном каталоге".
    • Нажмите кнопку "Создать"

    именование проекта CMake

    Снимок экрана: пользовательский интерфейс Visual Studio для именования проекта CMake и нажатия кнопки "Создать".

  2. Настройте переменную среды VCPKG_ROOT.

    Откройте встроенное окно PowerShell разработчика в Visual Studio.

    открытие встроенной powershell для разработчика

    Снимок экрана: пользовательский интерфейс Visual Studio для встроенного окна разработчика PowerShell

    Выполните следующие команды:

    $env:VCPKG_ROOT = "C:\path\to\vcpkg"
    $env:PATH = "$env:VCPKG_ROOT;$env:PATH"
    

    настройка переменных среды

    Снимок экрана: пользовательский интерфейс Visual Studio для встроенного окна разработчика PowerShell, в котором показано, как настроить VCPKG_ROOT и добавить его в PATH.

    Примечание.

    Настройка переменных среды таким образом влияет только на текущий сеанс терминала. Чтобы сделать эти изменения постоянными во всех сеансах, задайте их на панели переменных среды Windows.

    Откройте командную строку разработчика в Visual Studio.

    открытие командной строки разработчика Visual Studio.

    Снимок экрана: пользовательский интерфейс Visual Studio для командной строки разработчика.

    Выполните следующие команды:

    set VCPKG_ROOT="C:\path\to\vcpkg"
    set PATH=%VCPKG_ROOT%;%PATH%
    

    настройка переменных среды

    Снимок экрана: командная строка разработчика Visual Studio, показывающая, как настроить VCPKG_ROOT и добавить ее в PATH.

    Примечание.

    Настройка переменных среды таким образом влияет только на текущий сеанс терминала. Чтобы сделать эти изменения постоянными во всех сеансах, задайте их на панели переменных среды Windows.

    Параметр VCPKG_ROOT помогает Visual Studio найти экземпляр vcpkg. Добавьте его, чтобы PATH вы могли выполнять команды vcpkg непосредственно из оболочки.

  3. Создайте файл манифеста и добавьте зависимости.

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

  1. Измените файл 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!" в консоль.

  2. CMakePresets.json Настройте файл.

    • Переименуйте файл CMakePresets.json в CMakeUserPresets.json.
    • Обновите его содержимое, как показано ниже. Замените <VCPKG_ROOT> путь к каталогу vcpkg.
    {
      "version": 2,
      "configurePresets": [
        {
          "name": "default",
          "generator": "Ninja",
          "binaryDir": "${sourceDir}/build",
          "cacheVariables": {
            "CMAKE_TOOLCHAIN_FILE": "<VCPKG_ROOT>/scripts/buildsystems/vcpkg.cmake"
          }
        }
      ]
    }
    
    • Так как этот файл содержит закодированный абсолютный путь, рекомендуется не хранить этот файл под управлением версиями. Если вы используете Git, добавьте CMakeUserPresets.json в .gitignore файл.

    Файл CMakeUserPresets.json содержит один предустановку с именем default, этот предустановка задает CMAKE_TOOLCHAIN_FILE файл цепочки инструментов CMake vcpkg. Это позволяет vcpkg предоставлять пакеты CMake при настройке и сборке проекта. Дополнительные сведения см. в документации по интеграции vcpkg CMake.

  3. Измените файл CMakeLists.txt.

    Замените содержимое файла CMakeLists.txt приведенным ниже кодом.

    cmake_minimum_required(VERSION 3.10)
    
    project(HelloWorld)
    
    find_package(fmt CONFIG REQUIRED)
    
    add_executable(HelloWorld main.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. Сборка и запуск проекта

  1. Выполните сборку проекта.

    Нажмите, Ctrl+Shift+B чтобы создать проект в Visual Studio.

  2. Запустите приложение.

    Наконец, запустите исполняемый файл:

    Выполнение исполняемого файла

    Снимок экрана: пользовательский интерфейс Visual Studio для запуска исполняемого файла.

    Вы должны увидеть выходные данные:

    Выходные данные программы

    Снимок экрана: выходные данные программы : "Hello World!"

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

Дополнительные сведения см vcpkg.json. в нашей справочной документации: