【初心者向け】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"
)
  1. cmake_minimum_required(VERSION 3.10): CMake の最小バージョンを 3.10 に設定します。
  2. project(MyProject): プロジェクトの名前を "MyProject" に設定します。
  3. set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/build/toolchain.cmake"): CMake のツールチェーンファイルのパスを設定します。
  4. set(CMAKE_BUILD_TYPE Release): ビルドタイプを "Release" に設定します。
  5. add_executable(MyTarget MyTarget.cpp): "MyTarget.cpp" ファイルから実行可能ファイル "MyTarget" を作成します。
  6. target_link_libraries(MyTarget MyLib): ターゲット "MyTarget" にライブラリ "MyLib" をリンクします。
  7. 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" 変数は便利な変数ですが、状況に応じて上記の代替方法を使用することも検討してください。

  • 上記の方法はあくまで一例であり、プロジェクトに合わせて変更する必要があります。