Plataforma universal de Windows (UWP)
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 | Sí | |
x86 | x86-uwp | Sí |
x86-uwp-static-md | Sí | |
ARM | arm-uwp | |
arm-uwp-static-md | Sí | |
ARM64 | arm64-uwp | Sí |
arm64-uwp-static-md | Sí |
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.
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.
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()
Comentarios de vcpkg
vcpkg es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: