Visual StudioでCMakeプロジェクトをビルドする際の注意点 - CMAKE_GENERATOR_TOOLSETとツールチェーンファイル


CMAKE_GENERATOR_TOOLSETは、CMakeプロジェクトにおいて、ネイティブビルドシステムが使用するツールセットを指定するために用いられる変数です。これは、Visual Studioのような統合開発環境(IDE)や、Makeのようなビルドツールで使用されるコンパイラやリンカなどのツールチェーンを決定するために重要となります。

設定方法

CMAKE_GENERATOR_TOOLSET変数の設定方法はいくつかあります。

  • CMakeコマンドラインオプション
    -Tオプションを使用して設定できます。
cmake -G "Visual Studio 16 2019" -T "v142"
  • CMakeLists.txtファイル
    setコマンドを使用して設定できます。
set(CMAKE_GENERATOR_TOOLSET "v142")
  • ツールチェーンファイル
    CMAKE_TOOLCHAIN_FILE変数で指定されたツールチェーンファイル内で設定できます。

使用例

Visual Studio 2019を使用してVisual C++ 2019コンパイラでプロジェクトをビルドする場合、以下のいずれかの方法でCMAKE_GENERATOR_TOOLSET変数を設定できます。

  • CMakeコマンドラインオプション
cmake -G "Visual Studio 16 2019" -T "v142"
  • CMakeLists.txtファイル
set(CMAKE_GENERATOR_TOOLSET "v142")
  • ツールチェーンファイル
# toolchain.cmake

set(CMAKE_GENERATOR_TOOLSET "v142")
  • 一度ビルツリーに特定の値で初期化されたCMAKE_GENERATOR_TOOLSET変数の値を変更すると、予期せぬ動作が発生する可能性があります。
  • ツールチェーンファイルでCMAKE_GENERATOR_TOOLSET変数を設定する場合、その設定はビルツリー全体に適用されます。
  • CMAKE_GENERATOR_TOOLSET変数の値は、プロジェクトコードから変更してはなりません。
  • 具体的なサポート状況については、CMakeドキュメントを参照してください。
  • CMAKE_GENERATOR_TOOLSET変数は、すべてのCMakeジェネレータでサポートされているわけではありません。


CMakeLists.txtファイル

cmake_minimum_required(VERSION 3.10)

project(MyProject)

set(CMAKE_CXX_STANDARD 17)

add_executable(MyProgram main.cpp)

ツールチェーンファイル (toolchain.cmake)

# toolchain.cmake

set(CMAKE_GENERATOR_TOOLSET "v142")

ビルドコマンド

cmake -G "Visual Studio 16 2019" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake .
  1. CMakeの最小バージョン要件を3.10に設定します。
  2. プロジェクトの名前をMyProjectに設定します。
  3. C++標準を17に設定します。
  4. main.cppファイルからMyProgramという名前の実行可能ファイルを作成します。
  5. toolchain.cmakeファイルで指定されているツールセット "v142" を使用してVisual Studio 2019でプロジェクトをビルドします。


ツールチェーンファイルを使用する

ツールチェーンファイルは、CMakeプロジェクトで使用されるツールチェーンに関する設定を定義するファイルです。CMAKE_GENERATOR_TOOLSET変数を使用する代わりに、ツールチェーンファイルを使用してツールチェーンを指定することができます。

ツールチェーンファイルの例

# toolchain.cmake

set(CMAKE_GENERATOR_NAME Visual Studio 16 2019)
set(CMAKE_GENERATOR_TOOLSET "v142")
set(CMAKE_VS_VERSION 16)

set(CMAKE_C_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.2.8/bin/cl.exe")
set(CMAKE_CXX_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.2.8/bin/cl.exe")
set(CMAKE_LINKER "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.2.8/bin/link.exe")

ツールチェーンファイルを使用する方法

cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake .

CMAKE_TOOLCHAIN_FILE変数を使用する

CMAKE_TOOLCHAIN_FILE変数は、CMakeがツールチェーンファイルを見つける場所を指定するために用いられます。CMAKE_GENERATOR_TOOLSET変数を使用する代わりに、CMAKE_TOOLCHAIN_FILE変数を使用してツールチェーンファイルを指定することができます。

CMAKE_TOOLCHAIN_FILE変数の設定例

set(CMAKE_TOOLCHAIN_FILE toolchain.cmake)

CMAKE_GENERATOR_PLATFORM変数を使用する

CMAKE_GENERATOR_PLATFORM変数は、CMakeがビルドするプラットフォームを指定するために用いられます。CMAKE_GENERATOR_TOOLSET変数を使用する代わりに、CMAKE_GENERATOR_PLATFORM変数を使用してプラットフォームを指定し、CMakeが適切なツールチェーンを選択するようにすることができます。

CMAKE_GENERATOR_PLATFORM変数の設定例

set(CMAKE_GENERATOR_PLATFORM Win32)

CMAKE_TOOLCHAIN_FILE変数とCMAKE_GENERATOR_PLATFORM変数を使用する

CMAKE_TOOLCHAIN_FILE変数とCMAKE_GENERATOR_PLATFORM変数を組み合わせて使用することで、よりきめ細かい制御が可能になります。CMAKE_TOOLCHAIN_FILE変数を使用して特定のツールチェーンファイルを指定し、CMAKE_GENERATOR_PLATFORM変数を使用してプラットフォームを指定することができます。

この方法の例

set(CMAKE_TOOLCHAIN_FILE toolchain.cmake)
set(CMAKE_GENERATOR_PLATFORM Win32)
  • CMAKE_GENERATOR_PLATFORM変数は、すべてのCMakeジェネレータでサポートされているわけではありません。
  • ツールチェーンファイルを使用する場合は、そのファイルが常に最新の状態であることを確認する必要があります。
  • 上記の代替方法はすべて、CMAKE_GENERATOR_TOOLSET変数を使用するよりも複雑になる可能性があります。