Číst v angličtině

Sdílet prostřednictvím


Univerzální platforma Windows (UPW)

Trojčata

Vcpkg zahrnuje trojité tečky pro vytváření aplikací Univerzální platforma Windows (UPW) pomocí kompilátoru MSVCcl.exe.

Architektura vcpkg triplets Komunita
x64 x64–upw
x64-uwp-static-md Ano
x86 x86–upw Ano
x86-uwp-static-md Ano
paže arm-uwp
arm-uwp-static-md Ano
arm64 arm64-uwp Ano
arm64-uwp-static-md Ano

Projekce C++/CX vs. C++/WinRT

Aplikace PRO UPW obvykle využívají prostředí Windows Runtime rozhraní API a existuje celá řada řešení pro jejich použití z jazyka C++. Rozšíření jazyka C++/CX pro kompilátor MSVC (/ZW), projekce jazyka C++/WinRT, které fungují s kompilátory C++17 nebo knihovnou prostředí Windows Runtime.

UWP triplet toolchain ponechá povolení jazykových rozšíření C++/CX (/ZW) až do CMake, ale poskytne /FU parametr, který bude odkazovat na správný platform.winmd soubor používané sady nástrojů.

Poznámky k údržbě

Projekty CMake pro tyto triplety se sestavují pomocí CMAKE_SYSTEM_NAME nastavení na "WindowsStore" a CMAKE_SYSTEM_VERSION jsou nastaveny na "10.0".

Triplety UPW také sestavují kód využívající /DWINAPI_FAMILY=WINAPI_FAMILY_APP oddíl rozhraní API, takže knihovny se nedají sestavit, pokud používají nepodporované verze rozhraní API Win32. Obecně se doporučuje používat novější rozhraní API ve všech případech, ale pokud potřebujete vytvořit stejnou knihovnu pro starší verze Windows, budete možná muset použít podmíněně sestavovat kód, například následující, abyste podporovali oba scénáře.

    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

Trojice UPW se také sestavuje s /DUNICODE /D_UNICODE tím, jak se důrazně doporučují pro moderní vývoj. Další informace najdete v manifestu UTF-8 Všude.

Poznámky autora knihovny

Pro CMake 3.1 nebo novější řídíte povolení jazykových rozšíření MSVC C++/CX (tj. /ZW) prostřednictvím VS_WINRT_COMPONENT vlastnosti generátoru sady Visual Studio.

Pokud používáte projekce jazyka C++/WinRT, využijte port cppwinrt vcpkg a nespoléhejte na často zastaralé hlavičky v sadě 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 V souboru použijte něco podobného jako následující, abyste povolili správná nastavení sestavení pro platformu UPW, protože CMake je nenastavuje automaticky.

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

Měli byste nastavit _WIN32_WINNT=0x0A00 (Windows 10 nebo novější) i pro všechny WIN32 platformy nebo alespoň pro WINDOWS_STORE sestavení platformy.

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

Další texty