CMake のビルド設定をカスタマイズする

Visual Studio では CMake の構成ファイルを使用して CMake の生成とビルドを行います。 CMakePresets.json は Visual Studio 2019 バージョン 16.10 以降でサポートされており、推奨される CMake 構成ファイルです。 CMakePresets.json は CMake によって直接サポートされており、Visual Studio、VS Code、継続的インテグレーション パイプライン、Windows、Linux、Mac のコマンド ラインから CMake の生成とビルドを行うために使用できます。 CMakePresets.json の詳細については、CMake プリセットを使用した構成とビルドに関する記事を参照してください。

CMake ビルド構成に CMakeSettings.json ファイルを使用するプロジェクトを管理している場合、Visual Studio 2019 以降のバージョンでは CMake 設定エディターが提供されます。 このエディターを使用すると、CMake 構成の追加や、構成の設定のカスタマイズが簡単に行えます。 これは、CMakeSettings.json ファイルを手動で編集するよりも簡単な方法です。 それでもファイルを直接編集したい場合は、エディターの右上にある [JSON の編集] リンクを選択できます。

CMake 設定エディターを開くには、メイン ツール バーの [構成] ドロップダウンを選択して [構成の管理] を選択します。

Screenshot of the CMake configuration drop-down. Manage Configurations is highlighted.

インストールされている構成が左側に示された設定エディターが表示されます。

Screenshot of the CMake settings editor.

左側のウィンドウに、インストールされている構成 (x86-Debug) が表示されます。 右側のウィンドウに、選択した構成の設定が表示されます。 設定には、構成名、構成の種類 (デバッグに設定)、ツールセット (msvc_x86に設定)、CMake ツールチェーン ファイル (空)、ビルド ルート (${env:U Standard Edition RPROFILE}\CMakeBuilds\${workspaceHash}\build\${name})、CMake コマンド引数 (空)、ビルド コマンド引数 (-v) が含まれます。

Visual Studio では、1 つの x64-Debug 構成が既定で提供されています。 緑色のプラス記号を選択して、構成を追加できます。 エディターに表示される設定は、選択した構成によって異なる場合があります。

エディターで選択したオプションは、CMakeSettings.json という名前のファイルに書き込まれます。 このファイルで指定されているコマンド ライン引数と環境変数は、プロジェクトをビルドするときに CMake に渡されます。 Visual Studio で CMakeLists.txt が自動的に変更されることはありません。CMakeSettings.json を使うことにより、Visual Studio でビルドをカスタマイズしながら、CMake プロジェクト ファイルは変更されないようにして、チームの他のメンバーが任意のツールでそれを使用できるようにすることができます。

CMake の全般設定

[全般] では、次の設定を使用できます。

構成名

name の設定に対応します。 この名前は C++ の構成ドロップダウンに表示されます。 ${name} マクロを使って、パスなどの他のプロパティ値を作成できます。

構成のタイプ

configurationType の設定に対応します。 選択したジェネレーターのビルド構成の種類を定義します。 現在サポートされている値は、Debug、MinSizeRel、Release、および RelWithDebInfo です。 CMAKE_BUILD_TYPE にマップされます。

ツールセット

inheritedEnvironments の設定に対応します。 選択した構成のビルドに使用されるコンパイラ環境を定義します。 サポートされる値は、構成の種類によって異なります。 カスタム環境を作成するには、設定エディターの右上隅にある [JSON の編集] リンクを選択し、CMakeSettings.json ファイルを直接編集します。

CMake ツールチェーン ファイル

CMake ツールチェーン ファイルへのパスです。 このパスは "-DCMAKE_TOOLCHAIN_FILE = <filepath>" として CMake に渡されます。 ツールチェーン ファイルは、コンパイラとツールチェーン ユーティリティの場所、および他のターゲット プラットフォームとコンパイラに関連する情報を指定します。 既定では、この設定が指定されていない場合、Visual Studio で vcpkg ツールチェーン ファイル が使用されます。

ビルド ルート

buildRoot に対応します。 CMAKE_BINARY_DIR にマップされ、CMake キャッシュを作成する場所を指定します。 指定されたフォルダーが存在しない場合は作成されます。

コマンド引数

[コマンド引数] では、次の設定を使用できます。

CMake コマンド引数

cmakeCommandArgs に対応します。 CMake に渡されるコマンド ライン オプションをさらに指定します。

ビルド コマンド引数

buildCommandArgs に対応します。 基礎となるビルド システムに渡されるスイッチをさらに指定します。 たとえば、Ninja ジェネレーターの使用時に -v を渡すと、コマンド ラインの出力が Ninja に強制されます。

CTest コマンド引数

ctestCommandArgs に対応します。 テストの実行中に CTest に渡すコマンド ライン オプションをさらに指定します。

リモート ビルドの全般設定

リモート ビルドを使う Linux などの構成では、次の設定も使用できます。

rsync コマンド引数

rsync に渡される追加のコマンド ライン オプションであり、高速で多用途のファイル コピー ツールです。

CMake 変数とキャッシュ

これらの設定を使うと、CMake 変数を設定し、それらを CMakeSettings.json に保存できます。 それらはビルド時に CMake に渡され、CMakeLists.txt ファイルの値はすべてそれらによってオーバーライドされます。 CMakeGUI と同じ方法でこのセクションを使用し、編集できるすべての CMake 変数の一覧を表示できます。 [キャッシュの保存と生成] ボタンを選択して、高度な変数 (CMakeGUI ごと) を含む編集可能なすべての CMake 変数の一覧を表示します。 変数名で一覧をフィルター処理できます。

variables に対応します。 -D name=value として CMake に渡される CMake 変数の名前と値のペアを含みます。 CMake プロジェクトのビルド命令で CMake キャッシュ ファイルに直接変数を追加するように指定している場合は、代わりにここで追加することをお勧めします。

詳細設定

CMake ジェネレーター

generator に対応します。 CMake -G スイッチにマップされ、使用する CMake ジェネレーターを指定します。 他のプロパティ値を作成するときに、このプロパティをマクロ ${generator} として使うこともできます。 現在、Visual Studio では次の CMake ジェネレーターがサポートされています。

  • "Ninja"
  • "Unix Makefiles"
  • "Visual Studio 16 2019"
  • "Visual Studio 16 2019 Win64"
  • "Visual Studio 16 2019 ARM"
  • "Visual Studio 15 2017"
  • "Visual Studio 15 2017 Win64"
  • "Visual Studio 15 2017 ARM"
  • "Visual Studio 14 2015"
  • "Visual Studio 14 2015 Win64"
  • "Visual Studio 14 2015 ARM"

Ninja は柔軟性や機能ではなく、ビルド速度が速いことを目的に設計されているため、既定値としてこれが設定されます。 ただし、一部の CMake プロジェクトでは Ninja を使用して正しくビルドできない場合があります。 そのような場合は、代わりに Visual Studio プロジェクトを生成するように CMake に指示できます。

IntelliSense モード

IntelliSense エンジンによって使用される IntelliSense モード。 モードが選択されていない場合、Visual Studio では指定されたツールセットからモードを継承します。

インストール ディレクトリ

CMake によってターゲットがインストールされるディレクトリです。 CMAKE_INSTALL_PREFIX にマップされます。

CMake 実行可能ファイル

CMake プログラムの実行可能ファイルへの完全なパス。ファイル名と拡張子を含めます。 これにより、Visual Studio でカスタム バージョンの CMake を使用できます。 リモート ビルドの場合は、リモート マシン上の CMake の場所を指定します。

リモート ビルドを使う Linux などの構成では、次の設定も使用できます。

リモート CMakeLists.txt ルート

ルート CMakeLists.txt ファイルが含まれるリモート マシン上のディレクトリです。

リモート インストール ルート

CMake によってターゲットがインストールされるリモート マシン上のディレクトリです。 CMAKE_INSTALL_PREFIX にマップされます。

ソースのリモート コピー

ソース ファイルをリモート マシンにコピーするかどうかを指定し、rsync または sftp を使用するかどうかを指定できます。

CMakeSettings.json を直接編集する

CMakeSettings.json を直接編集して、カスタム構成を作成することもできます。 設定エディターの右上には [JSON の編集] ボタンがあり、編集用にファイルを開くことができます。

次の例では、作業を始めるときに使用できるサンプルの構成を示します。

    {
      "name": "x86-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "inheritEnvironments": [ "msvc_x86" ],
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": ""
    },

JSON の IntelliSense は、CMakeSettings.json ファイルを編集するときに役立ちます。

Screenshot of the CMake JSON IntelliSense pop-up in the editor.

JSON エディターでは、互換性のない設定を選択したときも通知されます。

ファイルの各プロパティについて詳しくは、「CMakeSettings.json スキーマ リファレンス」をご覧ください。

Visual Studio 2017 では、特定のプロジェクトの CMake キャッシュを作成するために CMake が呼び出される方法を定義する複数の CMake 構成が用意されています。 新しい構成を追加するには、ツール バーの [構成] ドロップダウンを選択して [構成の管理] を選択します。

Screenshot of Manage configurations selected in the drop-down.

定義済みの構成のリストから選択できます。

Add Configuration to CMake Settings dialog list of predefined configurations.

初めて構成を選択すると、Visual Studio によって CMakeSettings.json ファイルがプロジェクトのルート フォルダー内に作成されます。 このファイルは、たとえばクリーン操作の後などに、CMake キャッシュ ファイルを再作成するために使われます。

その他の構成を追加するには、CMakeSettings.json を右クリックして [構成の追加] を選択します。

Screenshot of the shortcut menu with Add configuration selected.

CMake の設定エディターを使用してファイルを編集することもできます。 ソリューション エクスプローラーCMakeSettings.json を右クリックして、[CMake 設定の編集] を選択します。 または、エディター ウィンドウの上部にある構成ドロップダウンから [構成の管理] を選択します。

CMakeSettings.json を直接編集して、カスタム構成を作成することもできます。 次の例では、作業を始めるときに使用できるサンプルの構成を示します。

    {
      "name": "x86-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "inheritEnvironments": [ "msvc_x86" ],
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": ""
    },

JSON の IntelliSense は、CMakeSettings.json ファイルを編集するときに役立ちます。

Screenshot of the CMake JSON IntelliSense pop-up in the editor.

"configurations" の JSON IntelliSense ポップアップには、buildCommandArgs、buildRoot、cmakeCommandArgs、configurationType などがあります。

ファイルの各プロパティについて詳しくは、「CMakeSettings.json スキーマ リファレンス」をご覧ください。

関連項目

Visual Studio の CMake プロジェクト
Linux CMake プロジェクトを構成する
リモートの Linux コンピューターに接続する
CMake デバッグ セッションを構成する
Linux プロジェクトの配置、実行、デバッグ
CMake 定義済み構成リファレンス