Piattaforma UWP (Universal Windows Platform)
vcpkg include triplette per la compilazione di applicazioni piattaforma UWP (Universal Windows Platform) (UWP) usando il compilatore MSVCcl.exe
.
Architettura | triplet vcpkg | Community |
---|---|---|
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ì |
Le applicazioni UWP usano in genere le API di Windows Runtime e sono disponibili diverse soluzioni per usarle da C++. Le estensioni del linguaggio C++/CX per il compilatore MSVC (/ZW
), le proiezioni del linguaggio C++/WinRT che funzionano con i compilatori C++17 o la libreria di Windows Runtime.
La toolchain triplet UWP lascia l'abilitazione delle estensioni del linguaggio C++/CX () fino/ZW
a CMake, ma fornisce un /FU
parametro per puntare al file appropriato platform.winmd
per il set di strumenti in uso.
I progetti CMake per questi tripletti vengono compilati usando CMAKE_SYSTEM_NAME
impostato su "WindowsStore" e CMAKE_SYSTEM_VERSION
impostati su "10.0".
Le triplette UWP compilano anche il codice usando /DWINAPI_FAMILY=WINAPI_FAMILY_APP
per la partizione API, in modo che le librerie non riescano a compilare se usano versioni non supportate delle API Win32. La raccomandazione generale consiste nell'usare le API più recenti in tutti i casi, ma se è necessario compilare la stessa libreria per le versioni precedenti di Windows, potrebbe essere necessario usare codice di compilazione condizionale, ad esempio il seguente per supportare entrambi gli scenari.
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
Anche le triplette UWP vengono compilate con /DUNICODE /D_UNICODE
perché sono entrambe fortemente consigliate per lo sviluppo moderno. Per altre informazioni, vedere il manifesto UTF-8 Everywhere.
Per CMake 3.1 o versione successiva, è possibile controllare l'abilitazione delle estensioni del linguaggio C++/CX MSVC (ad esempio /ZW
) tramite la VS_WINRT_COMPONENT
proprietà per il generatore di Visual Studio.
Se si usano proiezioni del linguaggio C++/WinRT, sfruttare la porta cppwinrt vcpkg anziché basarsi sulle intestazioni spesso obsolete in 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()
CMakeLists.txt
Nel file usa qualcosa di simile al seguente per abilitare le impostazioni di compilazione appropriate per la piattaforma UWP perché non vengono impostate automaticamente da 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()
È consigliabile impostare _WIN32_WINNT=0x0A00
(Windows 10 o versione successiva) anche per tutte le piattaforme o almeno per WINDOWS_STORE
le WIN32
compilazioni della piattaforma.
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE _WIN32_WINNT=0x0A00)
endif()
Feedback su vcpkg
vcpkg è un progetto di open source. Selezionare un collegamento per fornire feedback: