Evrensel Windows Platformu (UWP)
vcpkg, MSVC cl.exe
derleyicisini kullanarak Evrensel Windows Platformu (UWP) uygulamaları oluşturmak için üçlüler içerir.
Mimari | vcpkg üçlüleri | Topluluk |
---|---|---|
x64 | x64-uwp | |
x64-uwp-static-md | Yes | |
x86 | x86-uwp | Yes |
x86-uwp-static-md | Yes | |
kol | arm-uwp | |
arm-uwp-static-md | Yes | |
arm64 | arm64-uwp | Yes |
arm64-uwp-static-md | Yes |
UWP uygulamaları genellikle Windows Çalışma Zamanı API'leri kullanır ve bunları C++'tan kullanmak için bir dizi çözüm vardır. MSVC derleyicisi (/ZW
) için C++/CX dil uzantıları, C++17 derleyicileriyle çalışan C++/WinRT dil projeksiyonları veya Windows Çalışma Zamanı Kitaplığı.
UWP üçlü araç zinciri, CMake'ye kadar C++/CX dil uzantılarını (/ZW
) etkinleştirerek ayrılır, ancak kullanılan araç takımı için uygun platform.winmd
dosyaya işaret eden bir /FU
parametre sağlar.
Bu üçüzler için CMake projeleri , "WindowsStore" ve CMAKE_SYSTEM_VERSION
"10.0" olarak ayarlanmış kullanılarak CMAKE_SYSTEM_NAME
oluşturulur.
UWP üçlüleri de API bölümü için kullanarak /DWINAPI_FAMILY=WINAPI_FAMILY_APP
kod oluşturur, bu nedenle Win32 API'lerinin desteklenmeyen sürümlerini kullanıyorlarsa kitaplıklar derlenemez. Genel öneri, her durumda daha yeni API'leri kullanmaktır, ancak Windows'un eski sürümleri için aynı kitaplığı oluşturmanız gerekiyorsa, her iki senaryoyu da desteklemek için aşağıdaki gibi koşullu derleme kodunu kullanmanız gerekebilir.
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 üçüzleri de ile /DUNICODE /D_UNICODE
oluşturulur, bu ikisi de modern geliştirme için şiddetle tavsiye edilir. Daha fazla bilgi için UTF-8 Everywhere bildirimine bakın.
CMake 3.1 veya üzeri için, Visual Studio oluşturucusunun özelliği aracılığıyla MSVC C++/CX dil uzantılarının (örneğin/ZW
) etkinleştirilmesini VS_WINRT_COMPONENT
denetleyebilirsiniz.
C++/WinRT dil projeksiyonlarını kullanıyorsanız, Windows SDK'sında sık sık güncel olmayan üst bilgileri kullanmak yerine cppwinrt vcpkg bağlantı noktasından yararlanın.
if (VCPKG_TOOLCHAIN)
message(STATUS "Using VCPKG for C++/WinRT.")
find_package(cppwinrt CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE Microsoft::CppWinRT)
endif()
Dosyanızda CMakeLists.txt
, CMake tarafından otomatik olarak ayarlanmadığından UWP platformu için uygun derleme ayarlarını etkinleştirmek için aşağıdakine benzer bir şey kullanın.
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()
Tüm WIN32
platformlar için veya en azından platform derlemeleri için WINDOWS_STORE
(Windows 10 veya üzeri) ayarlamanız _WIN32_WINNT=0x0A00
gerekir.
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE _WIN32_WINNT=0x0A00)
endif()
vcpkg geri bildirimi
vcpkg, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin: