Универсальная платформа Windows (UWP)
vcpkg включает в себя триплеты для создания приложений универсальная платформа Windows (UWP) с помощью компилятора MSVCcl.exe
.
Архитектура | vcpkg triplets | Сообщество |
---|---|---|
x64 | x64-uwp | |
x64-uwp-static-md | Да | |
x86 | x86-uwp | Да |
x86-uwp-static-md | Да | |
arm | arm-uwp | |
arm-uwp-static-md | Да | |
arm64 | arm64-uwp | Да |
arm64-uwp-static-md | Да |
Приложения UWP обычно используют среда выполнения Windows API и существуют ряд решений для использования из C++. Расширения языка C++/CX для компилятора MSVC (/ZW
), проекции языка C++/WinRT, которые работают с компиляторами C++17 или библиотекой среда выполнения Windows.
Цепочка инструментов UWP оставляет возможность расширения языка C++/CX (/ZW
) до CMake, но предоставляет /FU
параметр, указывающий на правильный platform.winmd
файл используемого набора инструментов.
Проекты CMake для этих тройных наборов создаются с помощью CMAKE_SYSTEM_NAME
параметра "WindowsStore" и CMAKE_SYSTEM_VERSION
имеют значение "10.0".
UWP также создает код, используя /DWINAPI_FAMILY=WINAPI_FAMILY_APP
для раздела API, поэтому библиотеки могут не создаваться, если они используют неподдерживаемые версии API Win32. Общая рекомендация заключается в использовании более новых API во всех случаях, но если необходимо создать одну библиотеку для более старых версий Windows, может потребоваться использовать условный код сборки, например следующий для поддержки обоих сценариев.
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 триплеты также создаются, /DUNICODE /D_UNICODE
так как они настоятельно рекомендуется для современной разработки. Дополнительные сведения см. в манифесте UTF-8 По всему миру.
Для CMake 3.1 или более поздней версии вы управляете включением расширений языка MSVC C++/CX (т. е. /ZW
с помощью VS_WINRT_COMPONENT
свойства для генератора Visual Studio).
При использовании проекций языка C++/WinRT используйте порт vcpkg cppwinrt, а не на основе часто устаревших заголовков в пакете 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()
CMakeLists.txt
В файле используется примерно следующее, чтобы включить правильные параметры сборки для платформы UWP, так как они не устанавливаются автоматически 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()
Необходимо задать _WIN32_WINNT=0x0A00
(Windows 10 или более поздней версии), а также для всех WIN32
платформ или по крайней мере для WINDOWS_STORE
сборок платформ.
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE _WIN32_WINNT=0x0A00)
endif()
Отзыв о vcpkg
vcpkg — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: