Lire en anglais

Partager via


Plateforme Windows universelle (UWP)

Triplés

vcpkg inclut des triplets pour la création d’applications plateforme Windows universelle (UWP) à l’aide du compilateur MSVCcl.exe.

Architecture triplets vcpkg Community
x64 x64-uwp
x64-uwp-static-md Oui
x86 x86-uwp Oui
x86-uwp-static-md Oui
arm arm-uwp
arm-uwp-static-md Oui
arm64 arm64-uwp Oui
arm64-uwp-static-md Oui

Projections C++/CX et C++/WinRT

Les applications UWP utilisent généralement des API Windows Runtime, et il existe plusieurs solutions pour les utiliser à partir de C++. Les extensions de langage C++/CX pour le compilateur MSVC (/ZW), les projections de langage C++/WinRT qui fonctionnent avec les compilateurs C++17 ou la bibliothèque Windows Runtime.

La chaîne d’outils triplet UWP laisse l’activation des extensions de langage C++/CX (/ZW) jusqu’à CMake, mais fournit un /FU paramètre pour pointer vers le fichier approprié platform.winmd pour l’ensemble d’outils utilisé.

Notes de maintenance

Les projets CMake pour ces triplets sont générés à l’aide CMAKE_SYSTEM_NAME de « WindowsStore » et CMAKE_SYSTEM_VERSION définis sur « 10.0 ».

Les triplets UWP créent également du code à l’aide /DWINAPI_FAMILY=WINAPI_FAMILY_APP de la partition d’API. Les bibliothèques peuvent donc échouer si elles utilisent des versions non prises en charge des API Win32. La recommandation générale est d’utiliser les API plus récentes dans tous les cas, mais si vous devez générer la même bibliothèque pour les versions antérieures de Windows, vous devrez peut-être utiliser le code de génération conditionnelle tel que le suivant pour prendre en charge les deux scénarios.

    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

Les triplets UWP sont également générés avec /DUNICODE /D_UNICODE , car ils sont fortement recommandés pour le développement moderne. Consultez le manifeste UTF-8 Partout pour plus d’informations.

Notes d’auteur de bibliothèque

Pour CMake 3.1 ou version ultérieure, vous contrôlez l’activation des extensions de langage MSVC C++/CX (c.-à-d. /ZW) via la VS_WINRT_COMPONENT propriété du générateur Visual Studio.

Si vous utilisez des projections de langage C++/WinRT, tirez parti du port vcpkg cppwinrt plutôt que de s’appuyer sur les en-têtes souvent obsolètes dans le Kit de développement logiciel (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()

Dans votre CMakeLists.txt fichier, utilisez un élément similaire à ce qui suit pour activer les paramètres de génération appropriés pour la plateforme UWP, car ils ne sont pas automatiquement définis par 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()

Vous devez définir _WIN32_WINNT=0x0A00 (Windows 10 ou version ultérieure) ainsi que pour toutes les plateformes, ou au moins pour les WIN32 builds de WINDOWS_STORE plateforme.

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

Pour aller plus loin