Auf Englisch lesen

Freigeben über


Universelle Windows-Plattform (UWP)

Drillinge

vcpkg enthält Triplets zum Erstellen von Universelle Windows-Plattform (UWP)-Anwendungen mithilfe des MSVC-Compilerscl.exe.

Aufbau vcpkg-Dreifache Community
x64 x64-uwp
x64-uwp-static-md Ja
x86 x86-uwp Ja
x86-uwp-static-md Ja
arm arm-uwp
arm-uwp-static-md Ja
arm64 arm64-uwp Ja
arm64-uwp-static-md Ja

C++/CX im Vergleich zu C++/WinRT-Projektionen

UWP-Anwendungen verbrauchen in der Regel Windows-Runtime APIs, und es gibt eine Reihe von Lösungen für die Verwendung dieser ApIs aus C++. Die C++/CX-Spracherweiterungen für den MSVC-Compiler (/ZW), die C++/WinRT-Sprachprojektionen, die mit C++17-Compilern oder der Windows-Runtime Bibliothek verwendet werden.

Die UWP-Dreifachtoolkette lässt die Aktivierung von C++/CX-Spracherweiterungen (/ZW) bis zu CMake zu, stellt jedoch einen /FU Parameter bereit, der auf die richtige platform.winmd Datei für das verwendete Toolset verweist.

Betreuernotizen

CMake-Projekte für diese Triplets werden mithilfe CMAKE_SYSTEM_NAME von "WindowsStore" erstellt und CMAKE_SYSTEM_VERSION auf "10.0" festgelegt.

Die UWP-Triplets erstellen auch Code für /DWINAPI_FAMILY=WINAPI_FAMILY_APP die API-Partition, sodass Bibliotheken nicht erstellt werden können, wenn sie nicht unterstützte Versionen von Win32-APIs verwenden. Die allgemeine Empfehlung besteht darin, die neueren APIs in allen Fällen zu verwenden. Wenn Sie jedoch dieselbe Bibliothek für ältere Versionen von Windows erstellen müssen, müssen Sie möglicherweise bedingten Code verwenden, z. B. die folgenden, um beide Szenarien zu unterstützen.

    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-Triplets bauen ebenfalls auf /DUNICODE /D_UNICODE , da beide für die moderne Entwicklung dringend empfohlen werden. Weitere Informationen finden Sie im UTF-8 Everywhere-Manifest.

Notizen zum Autor der Bibliothek

Für CMake 3.1 oder höher steuern Sie die Aktivierung der MSVC C++/CX-Spracherweiterungen (d. h. /ZW) über die VS_WINRT_COMPONENT Eigenschaft für den Visual Studio-Generator.

Wenn Sie C++/WinRT-Sprachprojektionen verwenden, nutzen Sie den cppwinrt vcpkg-Port, anstatt sich auf die häufig veralteten Header im Windows SDK zu verlassen.

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

Verwenden Sie in Ihrer CMakeLists.txt Datei etwas ähnliches wie das folgende, um die richtigen Buildeinstellungen für die UWP-Plattform zu aktivieren, da diese nicht automatisch von CMake festgelegt werden.

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()

Sie sollten (Windows 10 oder höher) auch für alle WIN32 Plattformen oder zumindest für WINDOWS_STORE Plattformbuilds festlegen _WIN32_WINNT=0x0A00 .

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

Weitere Informationen