Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Platforma uniwersalna systemu Windows (UWP)

Trojaczki

Narzędzie vcpkg obejmuje trojaczki do kompilowania aplikacji platformy platforma uniwersalna systemu Windows (UWP) przy użyciu kompilatora MSVCcl.exe.

Architektura trojaczki vcpkg Społeczność
x64 x64-uwp
x64-uwp-static-md Tak
x86 x86-uwp Tak
x86-uwp-static-md Tak
ramię arm-uwp
arm-uwp-static-md Tak
arm64 arm64-uwp Tak
arm64-uwp-static-md Tak

Projekcje C++/CX a C++/WinRT

Aplikacje platformy uniwersalnej systemu Windows zwykle korzystają z interfejsów API środowisko wykonawcze systemu Windows i istnieje wiele rozwiązań do używania ich z języka C++. Rozszerzenia języka C++/CX kompilatora MSVC (/ZW), projekcje języka C++/WinRT, które współdziałają z kompilatorami języka C++17 lub biblioteką środowisko wykonawcze systemu Windows.

Potrójny łańcuch narzędzi platformy UWP pozostawia włączenie rozszerzeń języka C++/CX (/ZW) do CMake, ale zapewnia /FU parametr wskazujący odpowiedni platform.winmd plik dla używanego zestawu narzędzi.

Uwagi dotyczące osoby odpowiedzialnej za obsługę

Projekty CMake dla tych trojaków są tworzone przy użyciu CMAKE_SYSTEM_NAME zestawu "WindowsStore" i CMAKE_SYSTEM_VERSION ustawione na "10.0".

Triplets platformy UWP kompiluje również kod używany /DWINAPI_FAMILY=WINAPI_FAMILY_APP dla partycji interfejsu API, więc biblioteki mogą nie kompilować, jeśli używają nieobsługiwanych wersji interfejsów API Win32. Ogólne zalecenie dotyczy używania nowszych interfejsów API we wszystkich przypadkach, ale jeśli musisz utworzyć tę samą bibliotekę dla starszych wersji systemu Windows, może być konieczne użycie warunkowego kodu, takiego jak poniższe w celu obsługi obu scenariuszy.

    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

Trojaczki platformy uniwersalnej systemu Windows są również tworzone z /DUNICODE /D_UNICODE użyciem, ponieważ są one zdecydowanie zalecane dla nowoczesnego programowania. Aby uzyskać więcej informacji, zobacz manifest UTF-8 Everywhere.

Notatki autora biblioteki

W przypadku narzędzia CMake 3.1 lub nowszego można kontrolować włączanie rozszerzeń języka C++/CX MSVC (tj. /ZW) za pośrednictwem VS_WINRT_COMPONENT właściwości generatora programu Visual Studio.

Jeśli korzystasz z projekcji języka C++/WinRT, skorzystaj z portu cppwinrt vcpkg zamiast polegać na często nieaktualnych nagłówkach w zestawie 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()

W pliku CMakeLists.txt użyj czegoś podobnego do poniższego, aby włączyć odpowiednie ustawienia kompilacji dla platformy UWP, ponieważ nie są one automatycznie ustawiane przez narzędzie 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()

Należy ustawić _WIN32_WINNT=0x0A00 (system Windows 10 lub nowszy), a także dla wszystkich WIN32 platform lub co najmniej dla WINDOWS_STORE kompilacji platformy.

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

Dalsze informacje