Universelle Windows-Plattform (UWP)
vcpkg enthält Triplets zum Erstellen von Universelle Windows-Plattform (UWP)-Anwendungen mithilfe des MSVC-Compilerscl.exe
.
Aufbau | vcpkg-Dreifache | Community |
---|---|---|
x64 | x64-uwp | |
x64-uwp-static-md | Ja | |
x86 | x86-uwp | Ja |
x86-uwp-static-md | Ja | |
arm | arm-uwp | |
arm-uwp-static-md | Ja | |
arm64 | arm64-uwp | Ja |
arm64-uwp-static-md | Ja |
UWP-Anwendungen verbrauchen in der Regel Windows-Runtime APIs, und es gibt eine Reihe von Lösungen für die Verwendung dieser ApIs aus C++. Die C++/CX-Spracherweiterungen für den MSVC-Compiler (/ZW
), die C++/WinRT-Sprachprojektionen, die mit C++17-Compilern oder der Windows-Runtime Bibliothek verwendet werden.
Die UWP-Dreifachtoolkette lässt die Aktivierung von C++/CX-Spracherweiterungen (/ZW
) bis zu CMake zu, stellt jedoch einen /FU
Parameter bereit, der auf die richtige platform.winmd
Datei für das verwendete Toolset verweist.
CMake-Projekte für diese Triplets werden mithilfe CMAKE_SYSTEM_NAME
von "WindowsStore" erstellt und CMAKE_SYSTEM_VERSION
auf "10.0" festgelegt.
Die UWP-Triplets erstellen auch Code für /DWINAPI_FAMILY=WINAPI_FAMILY_APP
die API-Partition, sodass Bibliotheken nicht erstellt werden können, wenn sie nicht unterstützte Versionen von Win32-APIs verwenden. Die allgemeine Empfehlung besteht darin, die neueren APIs in allen Fällen zu verwenden. Wenn Sie jedoch dieselbe Bibliothek für ältere Versionen von Windows erstellen müssen, müssen Sie möglicherweise bedingten Code verwenden, z. B. die folgenden, um beide Szenarien zu unterstützen.
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
UWP-Triplets bauen ebenfalls auf /DUNICODE /D_UNICODE
, da beide für die moderne Entwicklung dringend empfohlen werden. Weitere Informationen finden Sie im UTF-8 Everywhere-Manifest.
Für CMake 3.1 oder höher steuern Sie die Aktivierung der MSVC C++/CX-Spracherweiterungen (d. h. /ZW
) über die VS_WINRT_COMPONENT
Eigenschaft für den Visual Studio-Generator.
Wenn Sie C++/WinRT-Sprachprojektionen verwenden, nutzen Sie den cppwinrt vcpkg-Port, anstatt sich auf die häufig veralteten Header im Windows SDK zu verlassen.
if (VCPKG_TOOLCHAIN)
message(STATUS "Using VCPKG for C++/WinRT.")
find_package(cppwinrt CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE Microsoft::CppWinRT)
endif()
Verwenden Sie in Ihrer CMakeLists.txt
Datei etwas ähnliches wie das folgende, um die richtigen Buildeinstellungen für die UWP-Plattform zu aktivieren, da diese nicht automatisch von CMake festgelegt werden.
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()
Sie sollten (Windows 10 oder höher) auch für alle WIN32
Plattformen oder zumindest für WINDOWS_STORE
Plattformbuilds festlegen _WIN32_WINNT=0x0A00
.
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE _WIN32_WINNT=0x0A00)
endif()
Feedback zu vcpkg
vcpkg ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben: