영어로 읽기

다음을 통해 공유


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

C++/CX 및 C++/WinRT 프로젝션

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()

추가 참고 자료