Plataforma Universal do Windows (UWP)
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 |
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.
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.
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()
Comentários do vcpkg
O vcpkg é um projeto código aberto. Selecione um link para fornecer comentários: