CMakeでWindows 10 SDKをターゲットとする:CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION詳解
CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
は、CMake プロジェクトで Visual Studio 2015 以降 を使用して Windows 10 以降 をターゲットとする際に、使用する Windows SDK のバージョンを指定 するための変数です。
機能
この変数は、以下の機能を提供します。
- Windows 10 SDK のカスタムパス指定
CMAKE_WINDOWS_KITS_10_DIR
環境変数を設定することで、CMake に Windows 10 SDK のカスタムパスを指定することができます。 - DirectX コンポーネントの検索
一部のプロジェクトでは、DirectX コンポーネントをビルドするために特定の Windows SDK バージョンが必要となります。CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
を設定することで、これらのコンポーネントを適切な場所で見つけることができます。 - 適切な Windows SDK の選択
指定された Windows ターゲットバージョンに基づいて、CMake は適切な Windows SDK を選択します。
設定方法
CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
変数は、CMake プロジェクトの CMakeLists.txt
ファイル内で設定できます。 例は以下の通りです。
set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 10.0.19041.0)
上記の例では、CMake は Windows 10 バージョン 19041.0 をターゲットとする Windows SDK を選択します。
CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
変数は、CMAKE_SYSTEM_VERSION
変数よりも優先されます。- Windows ターゲットバージョンを指定していない場合、CMake は 最新のバージョンの Windows SDK を選択します。
CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
変数は、Visual Studio 2015 以降でのみ使用できます。
例
以下の例は、CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
変数を使用して、Windows 10 バージョン 19041.0 をターゲットとするプロジェクトをビルドする方法を示しています。
set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 10.0.19041.0)
project(myproject)
add_executable(myprogram main.cpp)
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(myproject)
set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 10.0.19041.0)
add_executable(myprogram main.cpp)
main.cpp
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
ビルドと実行
以下のコマンドを実行して、プロジェクトをビルドして実行します。
mkdir build
cd build
cmake ..
cmake --build .
./myprogram
このコードを実行すると、以下の出力がコンソールに表示されます。
Hello, World!
説明
add_executable(myprogram main.cpp)
: この行は、main.cpp
ファイルからmyprogram
という名前の実行可能ファイルを作成することを CMake に指示します。set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 10.0.19041.0)
: この行は、CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
変数を Windows 10 バージョン 19041.0 に設定します。project(myproject)
: この行は、プロジェクトの名前をmyproject
に設定します。cmake_minimum_required(VERSION 3.10)
: この行は、CMake 3.10 以降が必要であることを指定します。
以下の例は、CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
変数を使用して、異なるバージョンの Windows をターゲットとするプロジェクトをビルドする方法を示しています。
- Windows 8.1 をターゲットとする
set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 8.1.0)
- Windows 7 をターゲットとする
set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 7.0.0)
CMAKE_SYSTEM_VERSION 変数を使用する
CMAKE_SYSTEM_VERSION
変数は、CMake プロジェクトでターゲットとするオペレーティングシステムのバージョンを指定するために使用されます。 この変数は、CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
変数よりも優先的に使用されます。
以下の例は、CMAKE_SYSTEM_VERSION
変数を使用して Windows 10 バージョン 19041.0 をターゲットとするプロジェクトをビルドする方法を示しています。
cmake_minimum_required(VERSION 3.10)
project(myproject)
set(CMAKE_SYSTEM_VERSION 10.0.19041.0)
add_executable(myprogram main.cpp)
CMAKE_MINIMUM_REQUIRED_VERSION と CMAKE_MAXIMUM_REQUIRED_VERSION 変数を使用する
CMAKE_MINIMUM_REQUIRED_VERSION
と CMAKE_MAXIMUM_REQUIRED_VERSION
変数は、CMake プロジェクトでターゲットとするオペレーティングシステムの最小バージョンと最大バージョンを指定するために使用されます。
以下の例は、CMAKE_MINIMUM_REQUIRED_VERSION
と CMAKE_MAXIMUM_REQUIRED_VERSION
変数を使用して Windows 10 バージョン 19041.0 をターゲットとするプロジェクトをビルドする方法を示しています。
cmake_minimum_required(VERSION 10.0.19041.0)
cmake_maximum_required(VERSION 10.0.19041.0)
project(myproject)
add_executable(myprogram main.cpp)
target_link_libraries コマンドを使用して Windows SDK を明示的にリンクする
target_link_libraries
コマンドを使用して、プロジェクトに必要な Windows SDK ライブラリを明示的にリンクすることができます。
以下の例は、target_link_libraries
コマンドを使用して Windows 10 バージョン 19041.0 SDK をリンクする方法を示しています。
cmake_minimum_required(VERSION 3.10)
project(myproject)
add_executable(myprogram main.cpp)
target_link_libraries(myprogram ${CMAKE_CURRENT_BINARY_DIR}/lib/user32.lib ${CMAKE_CURRENT_BINARY_DIR}/lib/gdi32.lib ${CMAKE_CURRENT_BINARY_DIR}/lib/imm32.lib ${CMAKE_CURRENT_BINARY_DIR}/lib/ole32.lib ${CMAKE_CURRENT_BINARY_DIR}/lib/shell32.lib ${CMAKE_CURRENT_BINARY_DIR}/lib/comdlg32.lib ${CMAKE_CURRENT_BINARY_DIR}/lib/advapi32.lib ${CMAKE_CURRENT_BINARY_DIR}/lib/shlwapi.lib)
- 特定のプロジェクトの要件に応じて、どの方法が最適かは異なります。
- 上記の代替方法は、すべての状況で
CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
変数の代わりとなるわけではありません。