Leer en inglés

Compartir a través de


Plataforma universal de Windows (UWP)

Trillizos

vcpkg incluye tripletas para compilar aplicaciones de Plataforma universal de Windows (UWP) mediante el compilador MSVCcl.exe.

Arquitectura Triplets vcpkg Comunidad
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

Proyecciones de C++/CX frente a C++/WinRT

Normalmente, las aplicaciones para UWP consumen API de Windows Runtime y hay varias soluciones para usarlas desde C++. Las extensiones de lenguaje C++/CX para el compilador de MSVC (/ZW), las proyecciones del lenguaje C++/WinRT que funcionan con compiladores de C++17 o la Biblioteca de Windows Runtime.

La cadena de herramientas triplet de UWP deja habilitar las extensiones de lenguaje C++/CX (/ZW) hasta CMake, pero proporciona un /FU parámetro para que apunte al archivo adecuado platform.winmd para el conjunto de herramientas que se usa.

Notas del mantenedor

Los proyectos de CMake para estos tripletos se compilan con CMAKE_SYSTEM_NAME establecido en "WindowsStore" y CMAKE_SYSTEM_VERSION se establecen en "10.0".

Los tripletes de UWP también compilan código mediante /DWINAPI_FAMILY=WINAPI_FAMILY_APP para la partición de API, por lo que las bibliotecas pueden no compilarse si usan versiones no admitidas de las API de Win32. La recomendación general es usar las API más recientes en todos los casos, pero si necesita compilar la misma biblioteca para versiones anteriores de Windows, es posible que tenga que usar código de compilación condicional como el siguiente para admitir ambos escenarios.

    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

Los tripletes de UWP también se compilan con /DUNICODE /D_UNICODE , ya que se recomiendan encarecidamente para el desarrollo moderno. Consulte el manifiesto UTF-8 Everywhere para obtener más información.

Notas del autor de la biblioteca

Para CMake 3.1 o posterior, puede controlar la habilitación de las extensiones de lenguaje C++/CX de MSVC (es decir, /ZW) a través de la VS_WINRT_COMPONENT propiedad para el generador de Visual Studio.

Si usa proyecciones de lenguaje C++/WinRT, aproveche el puerto vcpkg de cppwinrt en lugar de confiar en los encabezados a menudo obsoletos en 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()

En tu CMakeLists.txt archivo usa algo similar al siguiente para habilitar la configuración de compilación adecuada para la plataforma para UWP, ya que CMake no establece automáticamente.

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

Debe establecer _WIN32_WINNT=0x0A00 (Windows 10 o posterior) también para todas las WIN32 plataformas, o al menos para WINDOWS_STORE las compilaciones de plataforma.

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

Información adicional