UWP(유니버설 Windows 플랫폼)
vcpkg에는 MSVC cl.exe
컴파일러를 사용하여 UWP(유니버설 Windows 플랫폼) 애플리케이션을 빌드하기 위한 트리플렛이 포함되어 있습니다.
아키텍처 | 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++에서 이러한 API를 사용하기 위한 여러 솔루션이 있습니다. MSVC 컴파일러(/ZW
), C++17 컴파일러에서 작동하는 C++/WinRT 언어 프로젝션 또는 Windows 런타임 라이브러리에 대한 C++/CX 언어 확장입니다.
UWP 삼중 도구 체인은 C++/CX 언어 확장(/ZW
)을 CMake까지 사용하도록 설정하지만 사용 중인 도구 집합에 대한 적절한 platform.winmd
파일을 가리키는 매개 변수를 제공합니다/FU
.
이러한 세 쌍둥이에 대한 CMake 프로젝트는 "WindowsStore"로 설정된 것을 사용하여 CMAKE_SYSTEM_NAME
빌드되고 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 Everywhere 선언문을 참조하세요.
CMake 3.1 이상의 경우 Visual Studio 생성기의 속성을 통해 VS_WINRT_COMPONENT
MSVC C++/CX 언어 확장(예/ZW
: )의 활성화를 제어합니다.
C++/WinRT 언어 프로젝션을 사용하는 경우 Windows SDK에서 오래된 헤더를 사용하는 대신 cppwinrt vcpkg 포트를 활용합니다.
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
파일에서 다음과 유사한 항목을 사용하여 CMake에서 자동으로 설정되지 않으므로 UWP 플랫폼에 대한 적절한 빌드 설정을 사용하도록 설정합니다.
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
플랫폼 또는 적어도 WINDOWS_STORE
플랫폼 빌드에 대해 설정 _WIN32_WINNT=0x0A00
해야 합니다(Windows 10 이상).
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE _WIN32_WINNT=0x0A00)
endif()
vcpkg 피드백
vcpkg은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.