Leggere in inglese

Condividi tramite


Piattaforma UWP (Universal Windows Platform)

Tripletta

vcpkg include triplette per la compilazione di applicazioni piattaforma UWP (Universal Windows Platform) (UWP) usando il compilatore MSVCcl.exe.

Architettura triplet vcpkg Community
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

Proiezioni C++/CX e C++/WinRT

Le applicazioni UWP usano in genere le API di Windows Runtime e sono disponibili diverse soluzioni per usarle da C++. Le estensioni del linguaggio C++/CX per il compilatore MSVC (/ZW), le proiezioni del linguaggio C++/WinRT che funzionano con i compilatori C++17 o la libreria di Windows Runtime.

La toolchain triplet UWP lascia l'abilitazione delle estensioni del linguaggio C++/CX () fino/ZW a CMake, ma fornisce un /FU parametro per puntare al file appropriato platform.winmd per il set di strumenti in uso.

Note del manutentore

I progetti CMake per questi tripletti vengono compilati usando CMAKE_SYSTEM_NAME impostato su "WindowsStore" e CMAKE_SYSTEM_VERSION impostati su "10.0".

Le triplette UWP compilano anche il codice usando /DWINAPI_FAMILY=WINAPI_FAMILY_APP per la partizione API, in modo che le librerie non riescano a compilare se usano versioni non supportate delle API Win32. La raccomandazione generale consiste nell'usare le API più recenti in tutti i casi, ma se è necessario compilare la stessa libreria per le versioni precedenti di Windows, potrebbe essere necessario usare codice di compilazione condizionale, ad esempio il seguente per supportare entrambi gli scenari.

    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

Anche le triplette UWP vengono compilate con /DUNICODE /D_UNICODE perché sono entrambe fortemente consigliate per lo sviluppo moderno. Per altre informazioni, vedere il manifesto UTF-8 Everywhere.

Note sulla creazione di librerie

Per CMake 3.1 o versione successiva, è possibile controllare l'abilitazione delle estensioni del linguaggio C++/CX MSVC (ad esempio /ZW) tramite la VS_WINRT_COMPONENT proprietà per il generatore di Visual Studio.

Se si usano proiezioni del linguaggio C++/WinRT, sfruttare la porta cppwinrt vcpkg anziché basarsi sulle intestazioni spesso obsolete in Windows SDK.

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 Nel file usa qualcosa di simile al seguente per abilitare le impostazioni di compilazione appropriate per la piattaforma UWP perché non vengono impostate automaticamente da 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()

È consigliabile impostare _WIN32_WINNT=0x0A00 (Windows 10 o versione successiva) anche per tutte le piattaforme o almeno per WINDOWS_STORE le WIN32 compilazioni della piattaforma.

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

Altre risorse