Настройка проекта 🟢

Incomplete Translation

This is a community translation of the original English page, which is not fully translated yet. You are welcome to contribute!

Итоговый код: step000

В нашем примере мы используем CMake для организации компиляции кода. Это очень стандартный способ управления кросс-платформенными сборками, и мы следуем идиомам современного CMake.

Требования

Все, что нам нужно, это CMake и компилятор C++. Инструкции подробно описаны ниже для каждой ОС.

Hint

После установки вы можете ввести which cmake (Linux/macOS) или where cmake (Windows), чтобы проверить, находит ли ваша командная строка полный путь к команде cmake. Если нет, убедитесь, что ваша переменная окружения PATH содержит директорию, в которой установлен CMake.

Linux

Если вы используете дистрибутив Ubuntu/Debian, установите следующие пакеты:

sudo apt install cmake build-essential

Другие дистрибутивы имеют эквивалентные пакеты, убедитесь, что у вас работают команды cmake, make и g++.

Windows

Скачайте и установите CMake с официальной страницы загрузки. Вы можете использовать либо Visual Studio, либо MinGW в качестве набора инструментов для компиляции.

MacOS

Вы можете установить CMake с помощью brew install cmake, а XCode для сборки проекта.

Минимальный проект

Самый минимальный проект состоит из файла с исходным кодом main.cpp и файла сборки CMakeLists.txt.

Начнем с классического “Hello, world!” в main.cpp:

#include <iostream>

int main (int, char**) {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}

В CMakeLists.txt мы указываем, что хотим создать target типа executable с именем “App” (это также будет имя исполняемого файла), и чей исходный код находится в main.cpp:

add_executable(App main.cpp)

CMake также ожидает в начале файла CMakeLists.txt указания версии CMake, для которой написан файл (минимальная поддерживаемая…ваша версия), и некоторой информации о проекте:

cmake_minimum_required(VERSION 3.0...3.25)
project(
    LearnWebGPU # имя проекта, которое также будет именем решения Visual Studio, если вы его используете
    VERSION 0.1.0 # любая версия
    LANGUAGES CXX C # языки программирования, используемые в проекте
)

{{Устанавливаем app target}}

{{Рекомендуемые дополнения}}

Сборка

Теперь мы готовы собрать наш минимальный проект. Откройте терминал и перейдите в директорию, где находятся файлы CMakeLists.txt и main.cpp:

cd your/project/directory

Hint

В окне проводника Windows, показывающем директорию вашего проекта, нажмите Ctrl+L, затем введите cmd и нажмите Enter. Это откроет терминал в текущей директории.

Теперь попросим CMake создать файлы сборки для нашего проекта. Мы просим его изолировать файлы сборки от нашего исходного кода, поместив их в директорию build/ с помощью опции -B build. Это очень рекомендуется, чтобы легко отличать сгенерированные файлы от тех, которые мы написали вручную (т.е. исходные файлы):

cmake . -B build

Это создает файлы сборки для make, Visual Studio или XCode в зависимости от вашей системы (можно использовать -G чтобы указать конкретную систему сборки, см. cmake -h для получения дополнительной информации). Чтобы окончательно собрать программу и сгенерировать исполняемый файл App (или App.exe), вы можете либо открыть сгенерированное решение Visual Studio или XCode, либо ввести в терминале:

cmake --build build

Затем запустите полученную программу:

build/App  # linux/macOS
build\Debug\App.exe  # Windows

Рекомендуемые дополнения

Мы настроим некоторые свойства таргета App, вызвав команду set_target_properties где-то после add_executable.

set_target_properties(App PROPERTIES
    CXX_STANDARD 17
    CXX_STANDARD_REQUIRED ON
    CXX_EXTENSIONS OFF
    COMPILE_WARNING_AS_ERROR ON
)

Свойство CXX_STANDARD установлено на 17, чтобы указать, что мы требуем C++17 (это позволит нам использовать некоторые синтаксические трюки позже, но не является обязательным). Свойство CXX_STANDARD_REQUIRED гарантирует, что конфигурация завершится ошибкой, если C++17 не поддерживается.

Свойство CXX_EXTENSIONS установлено на OFF, чтобы отключить специфичные для компилятора расширения (например, в GCC это заставит CMake использовать -std=c++17 вместо -std=gnu++17 в списке флагов компиляции).

Свойство COMPILE_WARNING_AS_ERROR включено как хорошая практика, чтобы убедиться, что никакие предупреждения не остаются без внимания. Предупреждения действительно важны, особенно при изучении нового языка/библиотеки. Чтобы убедиться, что у нас есть как можно больше предупреждений, мы добавляем некоторые опции компиляции:

if (MSVC)
    target_compile_options(App PRIVATE /W4)
else()
    target_compile_options(App PRIVATE -Wall -Wextra -pedantic)
endif()

Note

В сопровождающем коде я скрыл эти детали в функции target_treat_all_warnings_as_errors() определенной в utils.cmake и включенной в начале файла CMakeLists.txt.

На MacOS CMake может генерировать файлы проекта XCode. Однако по умолчанию не создаются схемы, и XCode сам генерирует схему для каждой цели CMake – обычно нам нужна только схема для нашей основной цели. Поэтому мы устанавливаем свойство XCODE_GENERATE_SCHEME. Мы также уже включим захват кадров для отладки GPU

if (XCODE)
    set_target_properties(App PROPERTIES
        XCODE_GENERATE_SCHEME ON
        XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE "Metal"
    )
endif()

Заключение

Теперь у нас есть хорошая базовая конфигурация проекта, на которую мы будем опираться в следующих главах. В следующих главах мы увидим, как интегрировать WebGPU в наш проект, как инициализировать его, и как открыть окно для отрисовки.

Итоговый код: step000