CMake で WinRT アプリケーション開発: VS_WINRT_REFERENCES プロパティ徹底解説
この解説では、CMake の "Properties: Targets" における "VS_WINRT_REFERENCES" プロパティについて、分かりやすく説明します。このプロパティは、Visual Studio で Windows Runtime (WinRT) アプリケーションを開発する際に、必要な WinRT コンポーネントへの参照を設定するために使用されます。
"VS_WINRT_REFERENCES" プロパティは、ターゲット (プロジェクト) が依存する WinRT コンポーネントの GUID (Globally Unique Identifier) をカンマ区切りで指定するものです。これらのコンポーネントは、Visual Studio によって自動的にプロジェクトに追加され、リンクされます。
使用方法
"VS_WINRT_REFERENCES" プロパティは、CMake の "target_properties" コマンドを使用して設定できます。以下の例は、"myTarget" という名前のターゲットに対して "VS_WINRT_REFERENCES" プロパティを設定する方法を示しています。
target_properties(myTarget PROPERTIES VS_WINRT_REFERENCES "87caac90-f21a-4c6a-912e-67049141e482; 2924db28-07e6-432b-83dc-102794125a52")
この例では、"myTarget" ターゲットは、GUID "87caac90-f21a-4c6a-912e-67049141e482" と "2924db28-07e6-432b-83dc-102794125a52" の WinRT コンポーネントに依存します。
- WinRT コンポーネントの GUID は、Microsoft のドキュメントから取得できます。
- "VS_WINRT_REFERENCES" プロパティは、Visual Studio 2012 以降でのみ使用できます。
例 1: 単一の WinRT コンポーネントへの参照
cmake_minimum_required(VERSION 3.10)
project(myProject VERSION 1.0)
set(CMAKE_TARGET_LEGACY_DIRECTORY ${CMAKE_BINARY_DIR}/legacy)
add_executable(myTarget myTarget.cpp)
target_properties(myTarget PROPERTIES VS_WINRT_REFERENCES "87caac90-f21a-4c6a-912e-67049141e482")
この例では、"myTarget" という名前のターゲットが、GUID "87caac90-f21a-4c6a-912e-67049141e482" の WinRT コンポーネントに依存します。
例 2: 複数の WinRT コンポーネントへの参照
cmake_minimum_required(VERSION 3.10)
project(myProject VERSION 1.0)
set(CMAKE_TARGET_LEGACY_DIRECTORY ${CMAKE_BINARY_DIR}/legacy)
add_executable(myTarget myTarget.cpp)
target_properties(myTarget PROPERTIES VS_WINRT_REFERENCES "87caac90-f21a-4c6a-912e-67049141e482; 2924db28-07e6-432b-83dc-102794125a52")
例 3: 条件付きで WinRT コンポーネントへの参照を設定する
cmake_minimum_required(VERSION 3.10)
project(myProject VERSION 1.0)
set(CMAKE_TARGET_LEGACY_DIRECTORY ${CMAKE_BINARY_DIR}/legacy)
add_executable(myTarget myTarget.cpp)
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
target_properties(myTarget PROPERTIES VS_WINRT_REFERENCES "87caac90-f21a-4c6a-912e-67049141e482")
endif()
この例では、"myTarget" ターゲットが Windows オペレーティング システム上でビルドされている場合のみ、GUID "87caac90-f21a-4c6a-912e-67049141e482" の WinRT コンポーネントへの参照が設定されます。
説明
- WinRT コンポーネントの GUID は、Microsoft のドキュメントから取得できます。
CMake の "Properties: Targets" における "VS_WINRT_REFERENCES" プロパティは、Visual Studio で Windows Runtime (WinRT) アプリケーションを開発する際に、必要な WinRT コンポーネントへの参照を設定するために使用されます。しかし、このプロパティにはいくつかの制限があります。
- WinRT コンポーネントの GUID を手動で指定する必要がある。
- Visual Studio 2012 以降でのみ使用可能である。
これらの制限を回避するために、以下の代替方法を使用することができます。
NuGet パッケージを使用する
NuGet パッケージは、WinRT コンポーネントを簡単に依存関係として追加する方法を提供します。NuGet パッケージを使用するには、以下の手順が必要です。
- Visual Studio で、プロジェクトに NuGet パッケージをインストールします。
- CMakeLists.txt ファイルで、
target_link_libraries
コマンドを使用して NuGet パッケージをターゲットにリンクします。
例
cmake_minimum_required(VERSION 3.10)
project(myProject VERSION 1.0)
set(CMAKE_TARGET_LEGACY_DIRECTORY ${CMAKE_BINARY_DIR}/legacy)
add_executable(myTarget myTarget.cpp)
target_link_libraries(myTarget Windows.Foundation)
この例では、"myTarget" ターゲットは、Windows.Foundation
NuGet パッケージに依存します。
Visual Studio プロジェクト ファイルを使用する
Visual Studio プロジェクト ファイルは、WinRT コンポーネントへの参照を設定するもう 1 つの方法です。Visual Studio プロジェクト ファイルを使用するには、以下の手順が必要です。
- Visual Studio で、新しい Visual Studio プロジェクトを作成します。
- プロジェクトのプロパティ ページで、WinRT コンポーネントへの参照を追加します。
- CMakeLists.txt ファイルで、
add_executable
コマンドを使用して Visual Studio プロジェクト ファイルをターゲットにします。
例
cmake_minimum_required(VERSION 3.10)
project(myProject VERSION 1.0)
set(CMAKE_TARGET_LEGACY_DIRECTORY ${CMAKE_BINARY_DIR}/legacy)
add_executable(myTarget myTarget.vcxproj)
この例では、"myTarget" ターゲットは、myTarget.vcxproj
という名前の Visual Studio プロジェクト ファイルに依存します。
手動で WinRT コンポーネントをインクルードする
WinRT コンポーネントのヘッダー ファイルとライブラリ ファイルをプロジェクトに手動でインクルードすることもできます。この方法は、NuGet パッケージや Visual Studio プロジェクト ファイルを使用するよりも複雑ですが、より多くの制御を提供します。
例
cmake_minimum_required(VERSION 3.10)
project(myProject VERSION 1.0)
set(CMAKE_TARGET_LEGACY_DIRECTORY ${CMAKE_BINARY_DIR}/legacy)
add_executable(myTarget myTarget.cpp)
target_include_directories(myTarget PUBLIC "C:\path\to\winrt\headers")
target_link_libraries(myTarget "C:\path\to\winrt\libs\Windows.Foundation.lib")
この例では、"myTarget" ターゲットは、C:\path\to\winrt\headers
ディレクトリにある WinRT コンポーネントのヘッダー ファイルと、C:\path\to\winrt\libs\Windows.Foundation.lib
ファイルに含まれるライブラリに依存します。
- WinRT コンポーネントのヘッダー ファイルとライブラリ ファイルの場所は、インストール方法によって異なる場合があります。
- 上記の代替方法は、あくまでも例であり、実際のプロジェクトで使用するには適宜修正する必要があります。