通用 Windows 平台 (UWP)
vcpkg 包含三重組件,可用於使用 MSVC cl.exe
編譯程式建置 通用 Windows 平台 (UWP) 應用程式。
架構 | vcpkg triplets | 社群 |
---|---|---|
x64 | x64-uwp | |
x64-uwp-static-md | Yes | |
x86 | x86-uwp | Yes |
x86-uwp-static-md | Yes | |
arm | arm-uwp | |
arm-uwp-static-md | Yes | |
arm64 | arm64-uwp | Yes |
arm64-uwp-static-md | Yes |
UWP 應用程式通常會取用 Windows 執行階段 API,而且有許多解決方案可從C++使用這些解決方案。 MSVC 編譯程式的C++/CX 語言延伸模組、/ZW
適用於 C++17 編譯程式或 Windows 執行階段 連結庫的 C++/WinRT 語言投影。
UWP 三重項工具鏈會保留啟用 CMake 的C++/CX 語言延伸模組(/ZW
),但會提供 /FU
參數來指向所使用工具組的適當 platform.winmd
檔案。
這些三胞胎的 CMake 專案是使用 CMAKE_SYSTEM_NAME
設定為 「WindowsStore」 建置,並 CMAKE_SYSTEM_VERSION
設定為 「10.0」。。
UWP 三胞胎也會使用 來建置 API 分割區的程式代碼 /DWINAPI_FAMILY=WINAPI_FAMILY_APP
,因此如果連結庫使用不支援的 Win32 API 版本,連結庫就無法建置。 一般建議在所有情況下都使用較新的 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 或更新版本,您可以透過 VS_WINRT_COMPONENT
Visual Studio 產生器的 屬性來控制 MSVC C++/CX 語言延伸模組的/ZW
啟用。
如果使用C++/WinRT 語言投影,請利用 cppwinrt vcpkg 埠,而不是依賴 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
檔案中使用類似下列內容來啟用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
平台設定 _WIN32_WINNT=0x0A00
(Windows 10 或更新版本),或至少針對WINDOWS_STORE
平台組建。
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE _WIN32_WINNT=0x0A00)
endif()