ユニバーサル Windows プラットフォーム (UWP)
vcpkg には、MSVC cl.exe
コンパイラを使用してユニバーサル Windows プラットフォーム (UWP) アプリケーションをビルドするためのtripletsが含まれています。
Architecture | 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++ からこれらを使用するためのソリューションは多数あります。 /ZW
)、C++/WinRT 言語プロジェクション C++17 コンパイラ、または Windows ランタイム ライブラリで動作します。
UWP トリプレット ツールチェーンでは、C++/CX 言語拡張 (/ZW
) を CMake まで有効にできますが、使用するツールセットの適切なplatform.winmd
ファイルを指す/FU
パラメーターが提供されます。
これらのトリプレットの 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 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_WINNT=0x0A00
(Windows 10 以降) と、すべてのWIN32
プラットフォーム、または少なくともWINDOWS_STORE
プラットフォーム ビルドに対して設定する必要があります。
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE _WIN32_WINNT=0x0A00)
endif()
vcpkg に関するフィードバック
vcpkg はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。