Plateforme Windows universelle (UWP)
vcpkg inclut des triplets pour la création d’applications plateforme Windows universelle (UWP) à l’aide du compilateur MSVCcl.exe
.
Architecture | triplets vcpkg | Community |
---|---|---|
x64 | x64-uwp | |
x64-uwp-static-md | Oui | |
x86 | x86-uwp | Oui |
x86-uwp-static-md | Oui | |
arm | arm-uwp | |
arm-uwp-static-md | Oui | |
arm64 | arm64-uwp | Oui |
arm64-uwp-static-md | Oui |
Les applications UWP utilisent généralement des API Windows Runtime, et il existe plusieurs solutions pour les utiliser à partir de C++. Les extensions de langage C++/CX pour le compilateur MSVC (/ZW
), les projections de langage C++/WinRT qui fonctionnent avec les compilateurs C++17 ou la bibliothèque Windows Runtime.
La chaîne d’outils triplet UWP laisse l’activation des extensions de langage C++/CX (/ZW
) jusqu’à CMake, mais fournit un /FU
paramètre pour pointer vers le fichier approprié platform.winmd
pour l’ensemble d’outils utilisé.
Les projets CMake pour ces triplets sont générés à l’aide CMAKE_SYSTEM_NAME
de « WindowsStore » et CMAKE_SYSTEM_VERSION
définis sur « 10.0 ».
Les triplets UWP créent également du code à l’aide /DWINAPI_FAMILY=WINAPI_FAMILY_APP
de la partition d’API. Les bibliothèques peuvent donc échouer si elles utilisent des versions non prises en charge des API Win32. La recommandation générale est d’utiliser les API plus récentes dans tous les cas, mais si vous devez générer la même bibliothèque pour les versions antérieures de Windows, vous devrez peut-être utiliser le code de génération conditionnelle tel que le suivant pour prendre en charge les deux scénarios.
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
Les triplets UWP sont également générés avec /DUNICODE /D_UNICODE
, car ils sont fortement recommandés pour le développement moderne. Consultez le manifeste UTF-8 Partout pour plus d’informations.
Pour CMake 3.1 ou version ultérieure, vous contrôlez l’activation des extensions de langage MSVC C++/CX (c.-à-d. /ZW
) via la VS_WINRT_COMPONENT
propriété du générateur Visual Studio.
Si vous utilisez des projections de langage C++/WinRT, tirez parti du port vcpkg cppwinrt plutôt que de s’appuyer sur les en-têtes souvent obsolètes dans le Kit de développement logiciel (SDK) 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()
Dans votre CMakeLists.txt
fichier, utilisez un élément similaire à ce qui suit pour activer les paramètres de génération appropriés pour la plateforme UWP, car ils ne sont pas automatiquement définis par 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()
Vous devez définir _WIN32_WINNT=0x0A00
(Windows 10 ou version ultérieure) ainsi que pour toutes les plateformes, ou au moins pour les WIN32
builds de WINDOWS_STORE
plateforme.
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE _WIN32_WINNT=0x0A00)
endif()
Commentaires sur vcpkg
vcpkg est un projet open source. Sélectionnez un lien pour fournir des commentaires :