Windows10デスクトップ拡張機能をCMakeで自在にインストール: VS_DESKTOP_EXTENSIONS_VERSION徹底解説


"VS_DESKTOP_EXTENSIONS_VERSION" プロパティは、CMake の "Properties: Targets" におけるターゲットプロパティの一つであり、Visual Studio 2015 以降で Windows 10 デスクトップ拡張機能を含むターゲットのバージョンを指定するために使用されます。このプロパティを設定することで、ターゲットに含まれる拡張機能のバージョンを個別に制御することができます。

構文

target_properties(target_name PROPERTIES VS_DESKTOP_EXTENSIONS_VERSION version)
  • version: 拡張機能のバージョン番号。例:"10.0.10240.0"
  • target_name: ターゲットの名前

target_properties(my_target PROPERTIES VS_DESKTOP_EXTENSIONS_VERSION 10.0.14393.0)

この例では、my_target という名前のターゲットにバージョン 10.0.14393.0 の Windows 10 デスクトップ拡張機能を含めるように設定します。

  • CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 変数を使用して、使用している Windows 10 SDK と同じバージョンの拡張機能を使用することができます。
  • 複数の拡張機能を含む場合は、";" で区切ってバージョン番号を指定することができます。
  • このプロパティを設定しないと、Windows 10 デスクトップ拡張機能はターゲットに含まれません。
  • "VS_DESKTOP_EXTENSIONS_VERSION" プロパティは、CMake 3.4 以降で使用可能になります。


例 1: 単一の拡張機能

cmake_minimum_required(VERSION 3.4)

project(my_project)

set(CMAKE_TARGET_ARCHITECTURES x64)

add_executable(my_app my_app.cpp)

target_properties(my_app PROPERTIES VS_DESKTOP_EXTENSIONS_VERSION 10.0.14393.0)

例 2: 複数の拡張機能

cmake_minimum_required(VERSION 3.4)

project(my_project)

set(CMAKE_TARGET_ARCHITECTURES x64)

add_executable(my_app my_app.cpp)

target_properties(my_app PROPERTIES VS_DESKTOP_EXTENSIONS_VERSION 10.0.14393.0;10.0.17763.0)

この例では、my_app という名前のターゲットにバージョン 10.0.14393.0 と 10.0.17763.0 の Windows 10 デスクトップ拡張機能を含めるように設定します。

例 3: CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 変数を使用する

cmake_minimum_required(VERSION 3.4)

project(my_project)

set(CMAKE_TARGET_ARCHITECTURES x64)

set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 10.0.17763.0)

add_executable(my_app my_app.cpp)

この例では、CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 変数を使用して、使用している Windows 10 SDK と同じバージョンの拡張機能を使用するように設定します。

  • これらの例は、Visual Studio 2015 以降で Windows 10 デスクトップ拡張機能を含むターゲットをビルドする場合にのみ使用できます。


代替方法

"VS_DESKTOP_EXTENSIONS_VERSION" プロパティの代替方法として、以下の方法が考えられます。

手動で拡張機能をインストールする

CMake を使用せずに、手動で拡張機能をインストールすることができます。これは、比較的単純な方法ですが、拡張機能を個別に管理する必要があるという欠点があります。

手順

  1. 拡張機能の .cab ファイルをダウンロードします。
  2. 拡張機能の .cab ファイルをターゲットディレクトリにコピーします。
  3. 拡張機能の .cab ファイルをレジストリに登録します。

# 拡張機能の .cab ファイルをダウンロード
Download-File https://example.com/my-extension.cab -Destination C:\Temp\my-extension.cab

# 拡張機能の .cab ファイルをターゲットディレクトリにコピー
Copy-Item C:\Temp\my-extension.cab C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\bin\Extensibility\WindowsDesktop

# 拡張機能の .cab ファイルをレジストリに登録
reg add HKLM\SOFTWARE\Microsoft\VisualStudio\16.0\Extensions\WindowsDesktop /v MyExtension /t REG_SZ /d C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\bin\Extensibility\WindowsDesktop\my-extension.cab

"CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION" 変数を使用する

"CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION" 変数を使用して、使用している Windows 10 SDK と同じバージョンの拡張機能を使用することができます。これは、"VS_DESKTOP_EXTENSIONS_VERSION" プロパティよりも柔軟な方法ですが、拡張機能のバージョンを個別に制御することはできません。

手順

  1. "CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION" 変数を設定します。
  2. ターゲットをビルドします。

cmake_minimum_required(VERSION 3.4)

project(my_project)

set(CMAKE_TARGET_ARCHITECTURES x64)

set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 10.0.17763.0)

add_executable(my_app my_app.cpp)

"vcpkg" を使用する

"vcpkg" は、Windows 開発環境用のパッケージマネージャーです。vcpkg を使用して、Windows 10 デスクトップ拡張機能をインストールすることができます。これは、拡張機能を簡単にインストールできる方法ですが、vcpkg をインストールして設定する必要があるという欠点があります。

手順

  1. vcpkg をインストールします。
  2. vcpkg を使用して拡張機能をインストールします。
  3. ターゲットをビルドします。

# vcpkg をインストール
git clone https://github.com/microsoft/vcpkg.git C:\vcpkg
set PATH=C:\vcpkg\bin;%PATH%

# 拡張機能をインストール
vcpkg install windows-desktop-extensions

# ターゲットをビルド
cmake --build .

"NuGet" を使用する

"NuGet" は、.NET 開発環境用のパッケージマネージャーです。NuGet を使用して、Windows 10 デスクトップ拡張機能をインストールすることができます。これは、.NET 開発者にとって便利な方法ですが、NuGet をインストールして設定する必要があるという欠点があります。

手順

  1. NuGet をインストールします。
  2. NuGet を使用して拡張機能をインストールします。
  3. ターゲットをビルドします。

# NuGet をインストール
Install-Package Manager -Name NuGet -AllowPrerelease -Force

# 拡張機能をインストール
Install-Package WindowsDesktopExtensions

# ターゲットをビルド
dotnet build

最適な方法の選択

"VS_DESKTOP_EXTENSIONS_VERSION" プロパティの代替方法は、状況によって異なります。

  • 拡張機能の
  • 拡張機能を個別に管理する必要がある場合は、手動で拡張機能をインストールする方法が適しています。