Platforma uniwersalna systemu Windows (UWP)
Narzędzie vcpkg obejmuje trojaczki do kompilowania aplikacji platformy platforma uniwersalna systemu Windows (UWP) przy użyciu kompilatora MSVCcl.exe
.
Architektura | trojaczki vcpkg | Społeczność |
---|---|---|
x64 | x64-uwp | |
x64-uwp-static-md | Tak | |
x86 | x86-uwp | Tak |
x86-uwp-static-md | Tak | |
ramię | arm-uwp | |
arm-uwp-static-md | Tak | |
arm64 | arm64-uwp | Tak |
arm64-uwp-static-md | Tak |
Aplikacje platformy uniwersalnej systemu Windows zwykle korzystają z interfejsów API środowisko wykonawcze systemu Windows i istnieje wiele rozwiązań do używania ich z języka C++. Rozszerzenia języka C++/CX kompilatora MSVC (/ZW
), projekcje języka C++/WinRT, które współdziałają z kompilatorami języka C++17 lub biblioteką środowisko wykonawcze systemu Windows.
Potrójny łańcuch narzędzi platformy UWP pozostawia włączenie rozszerzeń języka C++/CX (/ZW
) do CMake, ale zapewnia /FU
parametr wskazujący odpowiedni platform.winmd
plik dla używanego zestawu narzędzi.
Projekty CMake dla tych trojaków są tworzone przy użyciu CMAKE_SYSTEM_NAME
zestawu "WindowsStore" i CMAKE_SYSTEM_VERSION
ustawione na "10.0".
Triplets platformy UWP kompiluje również kod używany /DWINAPI_FAMILY=WINAPI_FAMILY_APP
dla partycji interfejsu API, więc biblioteki mogą nie kompilować, jeśli używają nieobsługiwanych wersji interfejsów API Win32. Ogólne zalecenie dotyczy używania nowszych interfejsów API we wszystkich przypadkach, ale jeśli musisz utworzyć tę samą bibliotekę dla starszych wersji systemu Windows, może być konieczne użycie warunkowego kodu, takiego jak poniższe w celu obsługi obu scenariuszy.
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
Trojaczki platformy uniwersalnej systemu Windows są również tworzone z /DUNICODE /D_UNICODE
użyciem, ponieważ są one zdecydowanie zalecane dla nowoczesnego programowania. Aby uzyskać więcej informacji, zobacz manifest UTF-8 Everywhere.
W przypadku narzędzia CMake 3.1 lub nowszego można kontrolować włączanie rozszerzeń języka C++/CX MSVC (tj. /ZW
) za pośrednictwem VS_WINRT_COMPONENT
właściwości generatora programu Visual Studio.
Jeśli korzystasz z projekcji języka C++/WinRT, skorzystaj z portu cppwinrt vcpkg zamiast polegać na często nieaktualnych nagłówkach w zestawie 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()
W pliku CMakeLists.txt
użyj czegoś podobnego do poniższego, aby włączyć odpowiednie ustawienia kompilacji dla platformy UWP, ponieważ nie są one automatycznie ustawiane przez narzędzie 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()
Należy ustawić _WIN32_WINNT=0x0A00
(system Windows 10 lub nowszy), a także dla wszystkich WIN32
platform lub co najmniej dla WINDOWS_STORE
kompilacji platformy.
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE _WIN32_WINNT=0x0A00)
endif()
Opinia o produkcie vcpkg
vcpkg to projekt typu open source. Wybierz link, aby przekazać opinię: