Прочитать на английском

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


Универсальная платформа Windows (UWP)

Тройня

vcpkg включает в себя триплеты для создания приложений универсальная платформа Windows (UWP) с помощью компилятора MSVCcl.exe.

Архитектура vcpkg triplets Сообщество
x64 x64-uwp
x64-uwp-static-md Да
x86 x86-uwp Да
x86-uwp-static-md Да
arm arm-uwp
arm-uwp-static-md Да
arm64 arm64-uwp Да
arm64-uwp-static-md Да

Проекции C++/CX и C++/WinRT

Приложения UWP обычно используют среда выполнения Windows API и существуют ряд решений для использования из C++. Расширения языка C++/CX для компилятора MSVC (/ZW), проекции языка C++/WinRT, которые работают с компиляторами C++17 или библиотекой среда выполнения Windows.

Цепочка инструментов UWP оставляет возможность расширения языка C++/CX (/ZW) до CMake, но предоставляет /FU параметр, указывающий на правильный platform.winmd файл используемого набора инструментов.

Заметки о поддержке

Проекты CMake для этих тройных наборов создаются с помощью CMAKE_SYSTEM_NAME параметра "WindowsStore" и CMAKE_SYSTEM_VERSION имеют значение "10.0".

UWP также создает код, используя /DWINAPI_FAMILY=WINAPI_FAMILY_APP для раздела API, поэтому библиотеки могут не создаваться, если они используют неподдерживаемые версии API Win32. Общая рекомендация заключается в использовании более новых API во всех случаях, но если необходимо создать одну библиотеку для более старых версий Windows, может потребоваться использовать условный код сборки, например следующий для поддержки обоих сценариев.

    HANDLE hFile = nullptr;
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
    hFile = CreateFile2(
                fileName,
                GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING,
                nullptr);
#else
    hFile = CreateFileW(
                fileName,
                GENERIC_READ, FILE_SHARE_READ,
                nullptr,
                OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
                nullptr);
#endif

UWP триплеты также создаются, /DUNICODE /D_UNICODE так как они настоятельно рекомендуется для современной разработки. Дополнительные сведения см. в манифесте UTF-8 По всему миру.

Заметки автора библиотеки

Для CMake 3.1 или более поздней версии вы управляете включением расширений языка MSVC C++/CX (т. е. /ZWс помощью VS_WINRT_COMPONENT свойства для генератора Visual Studio).

При использовании проекций языка C++/WinRT используйте порт vcpkg cppwinrt, а не на основе часто устаревших заголовков в пакете SDK для Windows.

if (VCPKG_TOOLCHAIN)
    message(STATUS "Using VCPKG for C++/WinRT.")
    find_package(cppwinrt CONFIG REQUIRED)
    target_link_libraries(${PROJECT_NAME} PRIVATE Microsoft::CppWinRT)
endif()

CMakeLists.txt В файле используется примерно следующее, чтобы включить правильные параметры сборки для платформы UWP, так как они не устанавливаются автоматически CMake.

if(WIN32)
    target_compile_definitions(${PROJECT_NAME} PRIVATE _UNICODE UNICODE)

    if(WINDOWS_STORE)
        target_compile_definitions(${PROJECT_NAME} PRIVATE WINAPI_FAMILY=WINAPI_FAMILY_APP)
    endif()
endif()

Необходимо задать _WIN32_WINNT=0x0A00 (Windows 10 или более поздней версии), а также для всех WIN32 платформ или по крайней мере для WINDOWS_STORE сборок платформ.

if(WIN32)
    target_compile_definitions(${PROJECT_NAME} PRIVATE _WIN32_WINNT=0x0A00)
endif()

Дополнительные материалы