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 .
- CMakeの最小バージョン要件を3.10に設定します。
- プロジェクトの名前を
MyProject
に設定します。 - C++標準を17に設定します。
main.cpp
ファイルからMyProgram
という名前の実行可能ファイルを作成します。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
変数を使用するよりも複雑になる可能性があります。