CMakePresets.json および CMakeUserPresets.json Microsoft ベンダー マップ

CMake でサポートされている 2 つのファイル CMakePresets.jsonCMakeUserPresets.json を使用すると、ユーザーは一般的な構成、ビルド、テストのオプションを指定し、他のユーザーと共有できます。

CMakePresets.jsonCMakeUserPresets.json を使用して、Visual Studio、Visual Studio Code、継続的インテグレーション (CI) パイプライン、およびコマンド ラインから CMake を実行できます。

CMakePresets.json はプロジェクト全体のビルドを保存することを目的としており、CMakeUserPresets.json は開発者が独自のローカル ビルドを保存することを目的としています。 スキーマはどちらのファイルも同じです。

CMakePresets.jsonCMakeUserPresets.json では、ベンダー固有の情報を格納するためのベンダー マップがサポートされます。 Microsoft は、Visual Studio と Visual Studio Code に固有のオプションを含む 2 つのベンダー マップを保持しています。 ここでは、2 つの Microsoft ベンダー マップとベンダー マクロについて説明します。 スキーマの残りの部分の詳細については、公式な CMake のドキュメントを参照してください。 これには、構成プリセット、ビルド プリセット、およびテスト プリセットに関する情報が含まれます。

Visual Studio で CMakePresets.json を使用する方法の詳細については、「Visual Studio で CMake プリセットを使用して構成およびビルドする」を参照してください

Visual Studio Code で CMakePresets.json を使用する方法の詳細については、「VS Code で CMake プリセットを使用して構成およびビルドする」を参照してください

Visual Studio 設定ベンダー マップ

ベンダー URI が microsoft.com/VisualStudioSettings/CMake/<version> である 1 つのベンダー マップは、構成プリセットごとに許可され、Visual Studio と Visual Studio Code での CMake 統合に固有のオプションが含まれています。 ベンダー マップのすべてのオプションは、Visual Studio に適用されます。 Visual Studio と Visual Studio Code の両方に適用されるオプションは、明示的にマークされています。

Visual Studio 設定ベンダー マップのすべての設定はオプションであり、inherits キーによって指定された構成プリセットから継承されます。 変更されたオプションのみがファイルに書き込まれます。 Visual Studio 設定ベンダー マップは、CMakePresets.jsonCMakeUserPresets.json の両方でサポートされています。

Visual Studio 設定ベンダー マップのオプションは、CMake または CTest コマンド ラインの構築に影響しません。 そのため、同じ CMakePresets.json ファイルを使用して、Visual Studio、Visual Studio Code、コマンド ラインから CMake を実行できます。 例外として、cacheRoot および cmakeGenerateCommand オプションが挙げられます。 これらのオプションは、Visual Studio の既存のキャッシュを開くシナリオに固有であり、コマンド ラインから再現することはできません。

設定 説明
hostOS サポートされているオペレーティング システム (OS) の配列。 指定できる値は WindowsLinuxmacOS です。

hostOS の値は、Visual Studio と Visual Studio Code によって、ターゲット システムの OS に適用されない構成プリセットを非表示にし、より優れたユーザー エクスペリエンスを提供するために使用されます。

hostOS が指定されていない場合、Visual Studio と Visual Studio Code には常に、すべての構成プリセットが選択するために表示されます。 このフィールドは、1 つの文字列を含む配列に相当する文字列にすることもできます

このオプションは、Visual Studio と Visual Studio Code の両方でサポートされています。
intelliSenseMode Visual Studio で IntelliSense 情報を計算するために使用されるモードを、<target>-<toolset>-<arch> という形式で指定します。

指定できる値:

android-clang-arm
android-clang-arm64
android-clang-x6
android-clang-x86
ios-clang-ar
ios-clang-arm64
ios-clang-x6
ios-clang-x86
linux-gcc-arm
linux-gcc-x64
linux-gcc-x86
windows-clang-arm
windows-clang-arm64
windows-clang-x64
windows-clang-x86
windows-msvc-arm
windows-msvc-arm64
windows-msvc-x64
windows-msvc-x86

intelliSenseMode が指定されていない場合は、指定したコンパイラとターゲット アーキテクチャに一致する IntelliSense モードが Visual Studio で使用されます。 intelliSenseMode は、クロスコンパイル用に強化された IntelliSense を提供するためによく使用されます。

Visual Studio 2019 では、clang または clang-cl でビルドするときは、clang IntelliSense モードを明示的に指定する必要があります。
intelliSenseOptions 追加の IntelliSense 構成オプションのマップ。

useCompilerDefaults: IntelliSense でコンパイラの既定の defines と include のパスを使用するかどうかを指定する bool。 使用中のコンパイラで GCC スタイルの引数がサポートされていない場合に限り、false にする必要があります。 既定値は true です。

additionalCompilerArgs: Visual Studio で IntelliSense を制御するための追加オプションの配列。 このオプションではマクロ展開がサポートされます。
enableMicrosoftCodeAnalysis cl または clang-cl を使用してビルドするときに、Visual Studio 内で Microsoft コード分析を有効にする bool。 既定値は false です。
codeAnalysisRuleset Visual Studio で Microsoft コード分析を実行するときに使用するルールセットを指定します。 ルールセット ファイルのパス、または Visual Studio と共にインストールされたルールセット ファイルの名前を使用できます。 このオプションではマクロ展開がサポートされます。
disableExternalAnalysis Visual Studio の外部ヘッダーでコード分析を実行するかどうかを指定する bool
codeAnalysisExternalRuleset Visual Studio で外部ヘッダーの Microsoft コード分析を実行するときに使用するルールセットを指定します。 ルールセット ファイルのパス、または Visual Studio と共にインストールされたルールセット ファイルの名前を使用できます。 このオプションではマクロ展開がサポートされます。
enableClangTidyCodeAnalysis clang-cl を使用してビルドするときに、Visual Studio 内で Clang-Tidy コード分析を有効にする bool。 既定値は false です。
clangTidyChecks Visual Studio で Clang-Tidy コード分析を実行するときに、Clang-Tidy に渡される警告のコンマ区切りリスト。 ワイルドカードを使用でき、- プレフィックスを指定するとチェックが削除されます。
cacheRoot CMake キャッシュへのパスを指定します。 このディレクトリには、既存の CMakeCache.txt ファイルが含まれている必要があります。 このキーは、Visual Studio の既存のキャッシュを開くシナリオでのみサポートされています。 このオプションではマクロ展開がサポートされます。
cmakeGenerateCommand CMake キャッシュを生成するためのコマンドライン ツール (コマンドライン プログラムと引数で指定します。例: gencache.bat debug)。 このコマンドは、CMake 構成が呼び出されると、指定されたプリセット環境を使用してシェルで実行されます。 このキーは、Visual Studio の既存のキャッシュを開くシナリオでのみサポートされています。 このオプションではマクロ展開がサポートされます。

Visual Studio リモート設定ベンダー マップ

ベンダー URI が microsoft.com/VisualStudioRemoteSettings/CMake/<version> である 1 つのベンダー マップが、構成プリセットごとに許可され、Visual Studio でのリモート開発に固有のオプションが含まれています。 リモート開発とは、リモート SSH 接続または WSL で CMake を呼び出すことを意味します。 Visual Studio リモート設定ベンダー マップのどのオプションも、Visual Studio Code には適用されません。

Visual Studio リモート設定ベンダー マップのすべての設定はオプションであり、inherits キーによって指定された構成プリセットから継承されます。 変更されたオプションのみがファイルに書き込まれます。 Visual Studio リモート設定ベンダー マップは、CMakePresets.jsonCMakeUserPresets.json の両方でサポートされています。

Visual Studio 設定ベンダー マップのオプションは、CMake または CTest コマンド ラインの構築に影響しません。 そのため、同じ CMakePresets.json ファイルを使用して、Visual Studio、Visual Studio Code、コマンド ラインから CMake を実行できます。

Visual Studio リモート設定ベンダー マップの多くのオプションは、WSL1 が対象のときは無視されます。 これは、WSL1 ツールセットではすべてのコマンドがローカルで実行され、WSL1 からローカル ソース ファイルにアクセスするために、/mnt フォルダーの下にマウントされている Windows ドライブに依存しているためです。 ソース ファイルのコピーは必要ありません。 WSL1 を対象とする場合に無視されるオプションは、明示的にマークされています。

設定 説明
sourceDir プロジェクトがコピーされるリモート システム上のディレクトリへのパス。 既定値は $env{HOME}/.vs/$ms{projectDirName} です。 このオプションではマクロ展開がサポートされます。

リモート コピーのシナリオでは、マクロ ${sourceDir} によって、Windows コンピューター上のプロジェクト ソース ディレクトリではなく、リモート システム上のプロジェクト ソース ディレクトリに評価されます。 リモート コピーのシナリオには、リモート SSH 接続のターゲット設定が含まれます。 このような場合、リモート システム上のプロジェクト ソース ディレクトリは、Visual Studio リモート設定ベンダー マップの sourceDir の値によって決定されます。 対象が WSL1 の場合、このオプションは無視されます。
copySources true の場合、Visual Studio によって Windows からリモート システムにソースがコピーされます。 自分でファイルの同期を管理する場合は、false に設定します。 既定値は true です。 対象が WSL1 の場合、このオプションは無視されます。
copySourcesOptions Windows からリモート システムへのソース コピーに関連するオプションのオブジェクト。 対象が WSL1 の場合、このオブジェクトは無視されます。

copySourcesOptions.exclusionList: ソース ファイルをリモート システムにコピーするときに除外するパスの一覧。 パスには、ファイルまたはディレクトリの名前、またはコピーのルートからの相対パスを指定できます。 既定値は [ ".vs", ".git", "out" ] です。 このオプションではマクロ展開がサポートされます。

copySourcesOptions.method: ソース ファイルをリモート システムにコピーするために使用される方法。 指定できる値は、rsyncsftp です。 既定値は rsync です。

copySourcesOptions.concurrentCopies: ソースからリモート システムへの同期中に使用される同時コピー数。 既定値は 5 です。

copySourcesOptions.outputVerbosity: リモート システムへのソース コピー操作の詳細レベル。 指定できるレベルは、NormalVerboseDiagnostic です。 既定値は Normal です。
rsyncCommandArgs rsync に渡すコマンドライン引数の一覧。 既定値は [ "-t", "--delete", "--delete-excluded" ] です。 このオプションはマクロ展開をサポートし、WSL1 が対象のときは無視されます。
copyBuildOutput リモート システムから Windows にビルドの出力をコピーして戻すかどうかを指定します。 既定値は false です。 対象が WSL1 の場合、このオプションは無視されます。
copyOptimizations ソース コピーの最適化に関連するオプションのオブジェクト。 WSL1 が対象のときは、これらのオプションは無視されます。

copyOptimizations.maxSmallChange: rsync の代わりに sftp を使用してコピーするファイルの最大数。 既定値は 10 です。

copyOptimizations.useOptimizations: 使用されるコピーの最適化を指定します。 指定できる値は、コピー最適化なし (None)、rsync のみの最適化 (RsyncOnly)、または rsync と sftp の最適化 (RsyncAndSftp) です。 既定値は RsyncAndSftp です。

copyOptimizations.rsyncSingleDirectoryCommandArgs: 1 つのディレクトリの内容をリモート システムにコピーするときに rsync に渡されるコマンドライン引数の一覧。 既定値は [ "-t", "-d" ] です。 このオプションではマクロ展開がサポートされます。
copyAdditionalIncludeDirectoriesList IntelliSense 用にローカルにコピーされるリモート ヘッダー ディレクトリへのパスのリスト。 このオプションではマクロ展開がサポートされます。
copyExcludeDirectoriesList IntelliSense 用にローカルにコピーされないリモート ヘッダー ディレクトリへのパスのリスト。 このオプションではマクロ展開がサポートされます。
forceWSL1Toolset true の場合、Visual Studio から WSL を対象とするときは常に、WSL1 ツールセットが Visual Studio で使用されます。 WSL1 ツールセットによってすべてのコマンドがローカルで実行され、WSL からローカル ソース ファイルへのアクセスは、/mnt フォルダーの下にマウントされている Windows ドライブに依存して行われます。 これらのオプションは、WSL2 では速度が低下する可能性があります。 既定値は false です。

Visual Studio 2019 バージョン 16.10 では、WSL1 ツールセットが常に使用されます。 このオプションは、WSL2 のネイティブ サポートが利用可能になった後に関連します。

リモートのビルド前およびビルド後のイベント

remotePrebuildEventremotePostbuildEvent のオプションは、CMakePresets.json の導入に伴い非推奨になっています。

ビルド前、リンク前、ビルド後の各イベントを CMakeLists.txt にエンコードするには、add_custom_command を使用します。 これにより、Visual Studio でのビルドとコマンド ラインからのビルドで、同じ動作が保証されます。

Visual Studio に固有の動作が必要な場合は、tasks.vs.json でカスタム リモート タスクを追加できます。 始めるには、ソリューション エクスプローラーフォルダー ビューでルート CMakeLists.txt を右クリックし、[タスクの構成] を選択します。 その後、tasks.vs.json ファイルに新しいリモート タスクを追加することができます。

次のリモート タスクにより、リモート Linux システム上に test という名前のディレクトリが作成されます。

{
      "taskLabel": "mkdir",
      "appliesTo": "CMakeLists.txt",
      "type": "remote",
      "command": "mkdir test",
      "remoteMachineName": "localhost"
  }

任意の CMakeLists.txt を右クリックし、mkdir オプションを選択してこのタスクを実行します。

remoteMachineName の値は、接続マネージャーでの接続のホスト名と一致している必要があります。

Microsoft ベンダー マクロ

2 つの Microsoft ベンダー マップ Visual Studio SettingsVisual Studio Remote Settings により、CMake で定義されたすべてのマクロがサポートされます。 Microsoft のベンダー マップでは、CMake で定義されたすべてのマクロがサポートされます。 詳細については、cmake-presets のマクロ展開に関するページを参照してください。 すべてのマクロと環境変数は、CMake に渡される前に展開されます。

Visual Studio により、プレフィックス ms の付いたベンダー マクロがサポートされています。 Microsoft ベンダー マクロは、Microsoft ベンダー マップでのみ使用できます。 ベンダー マップに含まれないベンダー マクロを使用するプリセットは、CMake で使用できません。

マクロ 説明
$ms{projectDirName} Visual Studio で開いているフォルダーの名前に評価されます。 このマクロは、リモート コピーのシナリオで sourceDir の既定値を設定するために使用されます。 このマクロは、Visual Studio Code ではサポートされていません。 ${sourceDirName} を代わりに使用します。

環境変数

マクロ 説明
$env{<variable-name>}
$penv{<variable-name>}
CMake によってサポートされている、この構文を使用する環境変数を参照します。 詳細については、cmake-presets のマクロ展開に関するページを参照してください。

非推奨のマクロ

CMakeSettings.json でサポートされていたいくつかのマクロは、CMakePresets.json の導入により非推奨になりました。

ファイル パスを作成するには、CMake でサポートされているマクロを使用してください。 そのマクロを使用すると、Visual Studio 内とコマンド ラインで、同じ CMakePresets.json ファイルが動作することが保証されます。

非推奨のマクロ レコメンデーション
${projectFile} ${sourceDir}/CMakeLists.txt
${thisFile} ${sourceDir}/CMakePresets.json

使用できるシェル構文

Microsoft ベンダー マップで Linux パスを作成するとき、$HOME を参照するには $env{HOME} 構文を使用します。