【初心者向け】CMake: Visual Studioでビルドする際の「CMAKE_VS_MSBUILD_COMMAND」を徹底解説
"CMAKE_VS_MSBUILD_COMMAND" は、CMake の Visual Studio 用の生成器が設定する変数です。この変数は、Visual Studio 10 2010 以降にインストールされた MSBuild.exe コマンドへのパスを格納します。つまり、Visual Studio で CMake プロジェクトをビルドする場合、この変数はビルドプロセスで使用される MSBuild コマンドを指定するために使用されます。
重要なポイント
- この変数は、CMake の "configure" または "cmake --install" コマンドを実行することで設定されます。
- Visual Studio には複数のバージョンが存在するため、"CMAKE_VS_MSBUILD_COMMAND" 変数は使用している Visual Studio のバージョンに合わせた MSBuild.exe コマンドを指し示します。
- この変数は、Visual Studio 用の生成器のみによって設定されます。他の生成器を使用している場合は、この変数は定義されません。
使用方法
"CMAKE_VS_MSBUILD_COMMAND" 変数は、CMake のスクリプト内で直接使用することはできません。この変数は、MSBuild コマンドを実行するために内部的に使用されます。
例
以下の例は、"CMAKE_VS_MSBUILD_COMMAND" 変数を介して MSBuild コマンドを実行する方法を示しています。
message(STATUS "MSBuild command: ${CMAKE_VS_MSBUILD_COMMAND}")
# MSBuild コマンドを実行する
execute_process(
COMMAND "${CMAKE_VS_MSBUILD_COMMAND}"
# MSBuild コマンド引数を指定
ARGS
"ALL_BUILD"
"/property:Configuration=Release"
)
- CMake の "FindMSBuild" モジュールを使用して、特定の要件を満たす MSBuild コマンドを見つけることもできます。
- Visual Studio 以外のビルドシステムを使用している場合は、この変数は使用できません。
cmake_minimum_required(VERSION 3.10)
project(MyProject)
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/build/toolchain.cmake")
set(CMAKE_BUILD_TYPE Release)
# ソースファイルを追加
add_executable(MyTarget MyTarget.cpp)
# ターゲットをビルド
target_link_libraries(MyTarget MyLib)
# MSBuild コマンドを実行する
execute_process(
COMMAND "${CMAKE_VS_MSBUILD_COMMAND}"
# MSBuild コマンド引数を指定
ARGS
"MyProject.sln"
"/property:Configuration=Release"
)
cmake_minimum_required(VERSION 3.10)
: CMake の最小バージョンを 3.10 に設定します。project(MyProject)
: プロジェクトの名前を "MyProject" に設定します。set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/build/toolchain.cmake")
: CMake のツールチェーンファイルのパスを設定します。set(CMAKE_BUILD_TYPE Release)
: ビルドタイプを "Release" に設定します。add_executable(MyTarget MyTarget.cpp)
: "MyTarget.cpp" ファイルから実行可能ファイル "MyTarget" を作成します。target_link_libraries(MyTarget MyLib)
: ターゲット "MyTarget" にライブラリ "MyLib" をリンクします。execute_process(COMMAND "${CMAKE_VS_MSBUILD_COMMAND}" ARGS "MyProject.sln" "/property:Configuration=Release")
: "CMAKE_VS_MSBUILD_COMMAND" 変数を使用して MSBuild コマンドを実行します。このコマンドは、"MyProject.sln" ソリューションファイルを "Release" 構成でビルドします。
- 上記のコードはあくまで一例であり、プロジェクトに合わせて変更する必要があります。
"Visual Studio Developer Command Prompt" を使用する
"Visual Studio Developer Command Prompt" は、Visual Studio に付属するコマンドプロンプトです。このコマンドプロンプトを使用して、MSBuild コマンドを手動で実行することができます。
以下の例は、"Visual Studio Developer Command Prompt" を使用して MSBuild コマンドを実行する方法を示しています。
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86 & msbuild MyProject.sln /property:Configuration=Release
"vcvarsall.bat" ファイルを使用する
"vcvarsall.bat" ファイルは、Visual Studio に付属するバッチファイルです。このファイルを使用して、環境変数を設定し、MSBuild コマンドを実行することができます。
以下の例は、"vcvarsall.bat" ファイルを使用して MSBuild コマンドを実行する方法を示しています。
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86 & msbuild MyProject.sln /property:Configuration=Release
"FindMSBuild" モジュールを使用する
CMake には "FindMSBuild" モジュールが含まれており、特定の要件を満たす MSBuild コマンドを見つけることができます。
以下の例は、"FindMSBuild" モジュールを使用して MSBuild コマンドを見つける方法を示しています。
find_package(MSBuild REQUIRED)
# MSBuild コマンドへのパスを格納する変数
set(MSBUILD_COMMAND ${MSBuild_FOUND})
# MSBuild コマンドを実行する
execute_process(
COMMAND "${MSBUILD_COMMAND}"
# MSBuild コマンド引数を指定
ARGS
"MyProject.sln"
"/property:Configuration=Release"
)
それぞれの方法の利点と欠点
- "FindMSBuild" モジュールを使用する
- 利点
特定の要件を満たす MSBuild コマンドを見つけることができる - 欠点
CMake の "FindMSBuild" モジュールが必要
- 利点
- "vcvarsall.bat" ファイルを使用する
- 利点
環境変数を設定する必要がない - 欠点
バッチファイルのパスを指定する必要がある
- 利点
- "Visual Studio Developer Command Prompt" を使用する
- 利点
手軽に実行できる - 欠点
環境変数を毎回設定する必要がある
- 利点
"CMAKE_VS_MSBUILD_COMMAND" 変数は便利な変数ですが、状況に応じて上記の代替方法を使用することも検討してください。
- 上記の方法はあくまで一例であり、プロジェクトに合わせて変更する必要があります。