Ler em inglês

Compartilhar via


Plataforma Universal do Windows (UWP)

Trigêmeos

vcpkg inclui trigêmeos para criar aplicativos UWP (Plataforma Universal do Windows) usando o compilador MSVC cl.exe .

Arquitetura trigêmeos vcpkg Comunidade
x64 x64-UWP
x64-uwp-estático-md Sim
x86 x86-uwp Sim
x86-uwp-estático-md Sim
arm braço-uwp
braço-uwp-estático-md Sim
arm64 braço64-UWP Sim
arm64-uwp-estático-md Sim

Projeções de C++/CX vs. C++/WinRT

Os aplicativos UWP normalmente consomem APIs do Tempo de Execução do Windows e há várias soluções para usá-las do C++. As extensões de linguagem C++/CX para o compilador MSVC (/ZW), as projeções de linguagem C++/WinRT que funcionam com compiladores C++17 ou a Biblioteca do Tempo de Execução do Windows.

A cadeia de ferramentas tripla UWP deixa a habilitação de extensões de linguagem C++/CX (/ZW) até o CMake, mas fornece um /FU parâmetro para apontar para o arquivo adequado platform.winmd para o conjunto de ferramentas que está sendo usado.

Notas do mantenedor

Os projetos do CMake para esses trigêmeos são criados usando CMAKE_SYSTEM_NAME set como "WindowsStore" e CMAKE_SYSTEM_VERSION definido como "10.0".

Os trigêmeos UWP também compilam código usando /DWINAPI_FAMILY=WINAPI_FAMILY_APP para a partição de API, portanto, as bibliotecas podem falhar ao compilar se estiverem usando versões sem suporte de APIs Win32. A recomendação geral é usar as APIs mais recentes em todos os casos, mas se você precisar criar a mesma biblioteca para versões mais antigas do Windows, talvez seja necessário usar o código de criação condicional, como o seguinte, para dar suporte a ambos os cenários.

    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

Os trigêmeos UWP também são compilados /DUNICODE /D_UNICODE , pois ambos são fortemente recomendados para o desenvolvimento moderno. Veja o manifesto UTF-8 Everywhere para obter mais informações.

Notas do autor da biblioteca

Para o CMake 3.1 ou posterior, você controla a habilitação das extensões de linguagem MSVC C++/CX (ou seja/ZW, ) por meio da VS_WINRT_COMPONENT propriedade do gerador do Visual Studio.

Se estiver usando projeções de linguagem C++/WinRT, aproveite a porta cppwinrt vcpkg em vez de depender dos cabeçalhos geralmente desatualizados no SDK do Windows.

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

Em seu CMakeLists.txt arquivo, use algo semelhante ao seguinte para habilitar as configurações de build adequadas para a plataforma UWP, pois elas não são definidas automaticamente pelo 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()

Você também deve definir _WIN32_WINNT=0x0A00 (Windows 10 ou posterior) para todas as WIN32 plataformas, ou pelo menos para WINDOWS_STORE compilações de plataforma.

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

Leitura adicional