CMake の CMAKE_GENERATOR_TOOLSET 変数に関する FAQ

2024-04-02

CMAKE_GENERATOR_TOOLSET は CMake の変数であり、特定のジェネレータが使用するネイティブビルドシステムのツールセットを指定します。これは、特定のコンパイラやツールチェーンを選択したり、ビルドプロセスをカスタマイズしたりするために使用できます。

詳細

  • 設定方法

    • cmake(1) コマンドの -T オプション
    • CMAKE_GENERATOR_TOOLSET 環境変数
    • CMakeLists.txt ファイル内の set() コマンド
  • 使用可能な値

    • 使用可能な値は、ジェネレータによって異なります。
    • 詳細情報は、各ジェネレータのドキュメントを参照してください。
    • よく使用される値:
      • Visual Studio: "v140" (Visual Studio 2015)、"v141" (Visual Studio 2017)、"v142" (Visual Studio 2019)
      • Xcode: "Xcode12" (Xcode 12)
      • Ninja: "Ninja"
  • 影響

    • CMAKE_GENERATOR_TOOLSET は、以下の CMake 変数に影響を与えます:

      • CMAKE_C_COMPILER
      • CMAKE_LINKER
      • CMAKE_AR
      • CMAKE_RANLIB
    • これらの変数は、ビルドシステムによって使用されるコンパイラやツールを決定します。

  • 注意事項

    • CMAKE_GENERATOR_TOOLSET は、CMake の初期段階で設定する必要があります。
    • 一度設定すると、ビルドツリー内では変更できません。
    • 複数のジェネレータをサポートするプロジェクトでは、各ジェネレータ用に個別の CMAKE_GENERATOR_TOOLSET 値を設定する必要があります。

# Visual Studio 2019 を使用してビルド
cmake -T "v142" ..

# Xcode 12 を使用してビルド
cmake -T "Xcode12" ..

# Ninja を使用してビルド
cmake -T "Ninja" ..
  • CMAKE_GENERATOR_TOOLSET は、複雑な概念ですが、理解すれば、ビルドプロセスをより細かく制御することができます。
  • 問題が発生した場合は、CMake のドキュメントや関連フォーラムで情報を探すことをお勧めします。


CMake の CMAKE_GENERATOR_TOOLSET 変数を使ったサンプルコード

cmake_minimum_required(VERSION 3.15)

project(MyProject)

set(CMAKE_CXX_STANDARD 14)

# Visual Studio 2019 を使用してビルド
set(CMAKE_GENERATOR_TOOLSET "v142")

add_executable(my_project main.cpp)

Xcode

cmake_minimum_required(VERSION 3.15)

project(MyProject)

set(CMAKE_CXX_STANDARD 14)

# Xcode 12 を使用してビルド
set(CMAKE_GENERATOR_TOOLSET "Xcode12")

add_executable(my_project main.cpp)

Ninja

cmake_minimum_required(VERSION 3.15)

project(MyProject)

set(CMAKE_CXX_STANDARD 14)

# Ninja を使用してビルド
set(CMAKE_GENERATOR_TOOLSET "Ninja")

add_executable(my_project main.cpp)

複数のジェネレータをサポート

cmake_minimum_required(VERSION 3.15)

project(MyProject)

set(CMAKE_CXX_STANDARD 14)

if(CMAKE_GENERATOR MATCHES "Visual Studio")
  set(CMAKE_GENERATOR_TOOLSET "v142")
elseif(CMAKE_GENERATOR MATCHES "Xcode")
  set(CMAKE_GENERATOR_TOOLSET "Xcode12")
else()
  set(CMAKE_GENERATOR_TOOLSET "Ninja")
endif()

add_executable(my_project main.cpp)


CMAKE_GENERATOR_TOOLSET 環境変数を設定することで、コマンドラインで -T オプションを指定する代わりに、すべての CMake プロジェクトに対してデフォルトのツールセットを設定することができます。

コマンドライン

cmake(1) コマンドの -T オプションを使用して、特定のプロジェクトに対して CMAKE_GENERATOR_TOOLSET を設定することができます。

CMakeLists.txt ファイルの set() コマンドを使用して、CMAKE_GENERATOR_TOOLSET を設定することができます。

GUI ツール

CMake を使用してプロジェクトを生成する GUI ツールの中には、CMAKE_GENERATOR_TOOLSET を設定するためのオプションがあるものがあります。

詳細

  • 各方法の利点と欠点:

    • 環境変数:
      • 利点: 設定が簡単
      • 欠点: すべてのプロジェクトに適用される
    • コマンドライン:
      • 利点: 個々のプロジェクトごとに設定可能
      • 欠点: コマンドラインを毎回入力する必要がある
    • CMakeLists.txt ファイル:
      • 利点: プロジェクトファイルに設定を保存できる
      • 欠点: CMakeLists.txt ファイルを編集する必要がある
    • GUI ツール:
      • 欠点: すべてのツールが CMAKE_GENERATOR_TOOLSET をサポートしているわけではない
  • 使用する方法は、プロジェクトのニーズとワークフローによって異なります。

環境変数

set CMAKE_GENERATOR_TOOLSET="v142"

cmake ..

コマンドライン

cmake -T "Xcode12" ..

CMakeLists.txt ファイル

cmake_minimum_required(VERSION 3.15)

project(MyProject)

set(CMAKE_CXX_STANDARD 14)

set(CMAKE_GENERATOR_TOOLSET "Ninja")

add_executable(my_project main.cpp)

GUI ツール

CMake を使用してプロジェクトを生成する GUI ツールを開き、CMAKE_GENERATOR_TOOLSET オプションを設定します。




プログラミング初心者でもわかる!CMake の "set_directory_properties()" コマンドの使い方

set_directory_properties() コマンドは、CMakeプロジェクト内のディレクトリとサブディレクトリにプロパティを設定するために使用されます。これらのプロパティは、ビルドプロセス、インストール、その他の CMake 動作を制御するために使用できます。



CMake: find_library()とtarget_link_directories()の連携

target_link_directories()コマンドは、CMakeプロジェクト内のターゲットに対して、リンカがライブラリを検索するディレクトリを指定するために使用されます。これは、ターゲットがリンクするライブラリが標準の検索パスに存在しない場合に特に重要です。


CMake find_file() コマンドの代替方法:もっと柔軟なファイル検索

<variable>: 検索結果を格納する CMake 変数<file_names>: 検索するファイル名のリスト (スペース区切り)<path_list>: 検索するパス名のリスト (スペース区切り)<options>: 検索オプション (後述)


CMake include() で効率的なビルドを実現

include() は CMake の重要なコマンドの一つで、他の CMake ファイルやモジュールを読み込むために使用されます。 これにより、コードを分割し、再利用性と保守性を向上させることができます。機能他の CMake ファイルを読み込んで、その中のコマンドを実行する


cmake_policy()コマンドを使いこなしてCMakeプロジェクトをマスター

cmake_policy()コマンドの基本的な構文は以下の通りです。<policy-id>: ポリシーの識別子。CMP<NNNN>形式で指定されます。<behavior>: ポリシーの動作。OLDまたはNEWを指定します。OLDとNEWの動作の違い



CMakeコマンド mark_as_advanced() の詳細解説

mark_as_advanced() は、CMakeプロジェクトで特定のキャッシュ変数を "詳細設定" としてマークするために使用されるコマンドです。このコマンドによって、GUI ツールでこれらの変数はデフォルトでは表示されなくなり、ユーザーは "詳細設定" オプションを有効にするまで編集できなくなります。


CMake: CTEST_CUSTOM_TESTS_IGNOREを使ってテストを制御する方法

CTEST_CUSTOM_TESTS_IGNORE は、CMake の ctest_test() コマンドで実行されるテストを制御するための変数です。これは、特定のテストをテスト実行から除外したい場合に役立ちます。構文説明<REGULAR_EXPRESSION_LIST> は、除外したいテストの名前を記述する正規表現のリストです。


FindRTIモジュール vs 手動設定:CMakeでRTIを使う際の比較

FindRTI モジュールは、CMake プロジェクトで HLA 標準に準拠した RTI (Run-Time Infrastructure) を簡単に検出して利用できるようにするモジュールです。このモジュールを使用することで、プロジェクト内で RTI のインストール場所やヘッダーファイル、ライブラリを自動的に設定できます。


複雑なプロジェクトにおける長いファイルパス問題の解決策:CMAKE_OBJECT_PATH_MAX を活用

CMAKE_OBJECT_PATH_MAX は、CMake 変数の一つで、Windows システムにおける オブジェクトファイルのフルパス における 最大文字数 を設定します。これは、Windows のデフォルトの最大パス長制限である 260 文字を超えるパスを含むプロジェクトをビルドする場合に重要となります。


CMakeの add_imported_target と target_link_libraries コマンドを徹底解説

IMPORTED_NO_SYSTEM プロパティは、CMake において インポートされたターゲット が システムライブラリ でないことを指定するために使用されます。これは、ターゲットがシステムにデフォルトでインストールされているライブラリではなく、プロジェクト固有のライブラリであることを示します。