Visual Studio の CMake プロジェクト

CMake は、複数のプラットフォームで動作するビルド プロセスを定義するためのクロスプラットフォームのオープン ソース ツールです。 この記事は、CMake についてよく理解されていることを前提としています。 CMake の詳細については、CMake のドキュメントをご覧ください。 詳細については、CMake チュートリアルを参照してください。

Note

CMake は、過去数回のリリースで Visual Studio とより一層緊密に統合されてきました。 優先するバージョンの Visual Studio のドキュメントを表示するには、 [バージョン] セレクター コントロールを使用します。 このページの目次の一番上にあります。

Visual Studio の CMake ネイティブ サポートを使用すると、Windows、Linux 用 Windows サブシステム (WSL)、およびリモートシステム上の CMake プロジェクトを、Visual Studio の同じインスタンスから編集、ビルド、およびデバッグすることができます。 CMake プロジェクト ファイル (CMakeLists.txt など) は、IntelliSense と参照のために Visual Studio によって直接使用されます。 cmake.exe は、CMake の構成とビルドのために Visual Studio によって直接呼び出されます。

インストール

Windows 用 C++ CMake ツールは、C++ によるデスクトップ開発および C++ による Linux 開発のワークロードの一部としてインストールされます。 クロスプラットフォームの CMake 開発には、Windows 用の C++ CMake ツールC++ による Linux 開発の両方が必要です。

Visual Studio インストーラーのスクリーンショット。

インストーラーでは、[C++ によるデスクトップ開発] ドロップダウンが選択され、[Windows 用 C++ CMake ツール] が選択されています。"

詳細については、「Install the C++ Linux workload in Visual Studio」(Visual Studio で C++ の Linux ワークロードをインストールする) を参照してください。

IDE 統合

CMakeLists.txt ファイルを含むフォルダーを開くと、次の処理が行われます。

Visual Studio を起動すると最初に開くダイアログのスクリーンショット。

このダイアログには、[リポジトリのクローン]、[プロジェクトやソリューションを開く]、[ローカル フォルダーを開く]、[新しいプロジェクトの作成] の各オプションがあります。 スクリーンショットでは [ローカル フォルダーを開く] が強調されています。

  • Visual Studio は、CMake スクリプトを表示および編集するためのコマンドを含む CMake 項目を、[プロジェクト] メニューに追加します。

  • ソリューション エクスプローラーに、フォルダーの構造とファイルが表示されます。

  • Visual Studio は CMake を実行して、既定の構成用の CMake キャッシュ ファイル (CMakeCache.txt) を生成します。 CMake コマンドラインおよび CMake からのその他の出力が、出力ウィンドウに表示されます。

  • Visual Studio は、IntelliSense、情報の参照、リファクタリングなどを有効にするためのソース ファイルのインデックス付けを、バックグラウンドで開始します。 ユーザーが作業を行っている間、Visual Studio は、エディターおよびディスク上での変更を監視し、インデックスとソースの同期を維持します。

Note

Visual Studio 2022 バージョン 17.1 Preview 2 以降では、最上位レベルの CMakeLists.txt がワークスペースのルートではなくサブフォルダーに存在する場合、CMake 統合を有効にするかどうかを確認するメッセージが表示されます。 詳細については、「CMake の部分的なアクティブ化」を参照してください。

CMake キャッシュの生成が成功すると、プロジェクトをターゲット別に論理的に整理して表示することもできます。 [ソリューション エクスプローラー] ツール バーの [ビューの選択] ボタンを選びます。 [ソリューション エクスプローラー - ビュー] の一覧から [CMake ターゲット ビュー] を選択し、Enter キーを押してターゲット ビューを開きます。

[ソリューション エクスプローラー - ビュー] ウィンドウのスクリーンショット。フォルダー ビューが開いています。[CMake ターゲット ビュー] オプションが強調されています。

out/build/<config> フォルダー内の CMake によって生成されたすべての出力を表示するには、ソリューション エクスプローラーの上部にある [すべてのファイルの表示] ボタンをクリックします。

CMakeLists.txt ファイルは、任意の CMake プロジェクトの場合と同様に、各プロジェクト フォルダーで使用します。 ソース ファイルの指定、ライブラリの検索、コンパイラおよびリンカーのオプションの設定、その他のビルド システムの関連情報の指定を行うことができます。 Visual Studio によって提供される CMake 言語サービスの詳細については、「CMakeLists.txt ファイルの編集」を参照してください。

Visual Studio では CMake の構成ファイルを使用して CMake のキャッシュの生成とビルドを行います。 詳細については、「CMake プロジェクトの構成」と「CMake プロジェクトのビルド」を参照してください。

デバッグ時に実行可能ファイルに引数を渡す場合は、launch.vs.json と呼ばれる別のファイルを使用することができます。 Visual Studio でのクロスプラットフォームの CMake プロジェクトのデバッグの詳細については、「CMake プロジェクトのデバッグ」を参照してください。

ほとんどの Visual Studio および C++ の言語機能は、Visual Studio の CMake プロジェクトでサポートされています。 以下に例を示します。

Note

他の種類の "フォルダーを開く" プロジェクトには、追加の JSON ファイル CppProperties.json が使用されます。 このファイルは CMake プロジェクトには関係ありません。

CMake プロジェクトの構成

CMake の構成ステップにより、プロジェクトのビルド システムが生成されます。 これは、コマンド ラインで cmake.exe を呼び出すのと同じです。 CMake の構成ステップの詳細については、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 プリセットを使用した構成とビルドに関する記事を参照してください。 CMakeSettings.json は、以前のバージョンの Visual Studio を使用しているお客様が使用できます。 CMakeSettings.json の詳細については、「CMake のビルド設定をカスタマイズする」を参照してください。

CMake 構成ファイルまたは CMakeLists.txt ファイルに大幅な変更を加えると、Visual Studio によって自動的に CMake 構成ステップが実行されます。 構成ステップは手動で呼び出すことができます。ツール バーの [プロジェクト] > [キャッシュの構成] を選択します。 また、[ツール]>[オプション]>[CMake]>[全般] で構成設定を変更することもできます。

Visual Studio 設定ウィンドウの CMake 構成オプションのスクリーンショット。

CMake の構成設定が強調されています。[CMake キャッシュ通知を表示する] がオンになっています。 [キャッシュが期限切れの場合] で、[構成ステップを自動的に実行しない] オプションが選ばれています。

構成ステップがエラーなしで完了すると、情報が C++ の IntelliSense および言語サービスで使用できるようになります。 ビルドおよびデバッグの操作でも使用されます。

Visual Studio で既存の CMake キャッシュを開くこともできます。 詳細については、「既存のキャッシュを開く」を参照してください。

構成に関するフィードバックと通知をカスタマイズする

既定では、エラーが発生しない限り、ほとんどの構成メッセージが抑制されます。 すべてのメッセージを表示するには、[ツール]>[オプション]>[CMake]>[詳細な CMake 診断出力を有効にする] を選択します。

また、[CMake キャッシュ通知を表示する] をオフにすることで、すべての CMake キャッシュ通知 (金色のバー) を無効にすることができます。

CMake キャッシュ エラーのトラブルシューティング

問題を診断するために CMake キャッシュの状態に関する詳しい情報が必要な場合は、[プロジェクト] メイン メニュー、またはソリューション エクスプローラーCMakeLists.txt のコンテキスト メニューを開き、次のコマンドのいずれかを実行します。

  • [CMakeCache.txt の表示] により、エディターのビルド ディレクトリから CMakeCache.txt ファイルが開きます。 ここで CMakeCache.txt に対して編集した内容はすべて、キャッシュを消去するとワイプされます。 キャッシュを消去した後も存続する変更を行うには、CMake 設定のカスタマイズまたは CMake プリセットを使用した構成とビルドに関するページを参照してください。

  • [キャッシュの削除と再構成] では、ビルド ディレクトリが削除され、クリーン キャッシュから再構成されます。

  • [キャッシュの構成] では、Visual Studio で環境が最新の状態であると判断された場合でも、生成ステップが強制的に実行されます。

CMake プロジェクトのビルド

CMake ビルド ステップでは、既に生成されたプロジェクト バイナリ ツリーがビルドされます。 これは、コマンド ラインで cmake --build を呼び出すのと同じです。 CMake のビルド ステップの詳細については、CMake のドキュメントを参照してください。

CMake プロジェクトをビルドするには、次の選択肢があります。

  1. ツール バーで、[スタートアップ アイテム] ドロップダウンを見つけます。 希望するターゲットを選択して、F5 キーを押すか、ツール バーの [実行] ボタンを選択します。 Visual Studio ソリューションと同じように、プロジェクトは最初に自動的にビルドされます。

  2. CMake ターゲット ビューをアクティブにしてソリューション エクスプローラーで CMake ターゲットを右クリックし、コンテキスト メニューから [ビルド] を選択します。

  3. メイン メニューから、[ビルド] > [すべてビルド] を選択します。 ツール バーの [スタートアップ アイテム] ドロップダウンで CMake ターゲットが既に選択されていることを確認します。

想像したとおり、ビルド結果が出力ウィンドウエラー一覧に表示されます。

Visual Studio の [エラー一覧] ウィンドウのスクリーンショット 浮動小数点数から整数への変換など、データが失われる可能性がある変換に関する CMake ビルドの警告が表示されています。 :::image-end:::

ビルド設定を編集する

Visual Studio では CMake の構成ファイルを使用して CMake のビルドを行います。 CMake 構成ファイルは、ネイティブ ビルド ツール スイッチや環境変数などのビルド オプションをカプセル化します。 CMakePresets.json がアクティブな構成ファイルである場合は、CMake プリセットを使用した構成とビルドに関する記事を参照してください。 CMakeSettings.json がアクティブな構成ファイルである場合は、「CMake のビルド設定をカスタマイズする」を参照してください。 CMakePresets.json は Visual Studio 2019 バージョン 16.10 以降で使用でき、推奨される CMake 構成ファイルです。

CMake プロジェクトのデバッグ

すべての実行可能な CMake ターゲットが、ツール バーの [スタートアップ アイテム] ドロップダウンに表示されます。 デバッグを開始するには、いずれかを選択してツール バーの [デバッグ] > [デバッグの開始] ボタンを押します。 CMake プロジェクトでは、[現在のドキュメント] オプションは .cpp ファイルの場合にのみ有効です。

Visual Studio のデバッグ ドロップダウンのスクリーンショット。

ドロップダウンには、[デバッグ ターゲットの表示または非表示]、[現在のドキュメント]、[サンプル] (強調表示されています)、[box2d_tests]、[samples-noGUI] のオプションがあります。

[デバッグ] または F5 コマンドを選ぶと、前回のビルドの後で何かが変更されている場合は、最初にプロジェクトがビルドされます。 CMake 構成ファイル (CMakePresets.json または CMakeSettings.json) または CMakeLists.txt に変更を加えると、CMake キャッシュが再生成されます。

launch.vs.json ファイルでプロパティを設定することで、CMake デバッグ セッションをカスタマイズすることができます。 特定のターゲットのデバッグ設定をカスタマイズするには、[スタートアップ アイテム] ドロップダウンでターゲットを選択し、[デバッグ] > [<active-target> のデバッグおよび起動の設定] を押します。 CMake のデバッグ セッションについて詳しくは、「CMake デバッグ セッションを構成する」を参照してください。

CMake プロジェクトのマイ コードのみ

MSVC コンパイラを使用して Windows 用にビルドすると、CMake プロジェクトでマイ コードのみデバッグがサポートされます。 [マイ コードのみ] 設定を変更するには、[ツール]>[オプション]>[デバッグ]>[全般] に移動します。 マイ コードのみのデバッグの詳細については、「マイ コードのみを使用したユーザー コードだけのデバッグ」を参照してください。

CMake プロジェクトのエディット コンティニュ

MSVC コンパイラを使用して Windows 用にビルドする場合、CMake プロジェクトがエディット コンティニュをサポートします。 次のコードを CMakeLists.txt ファイルに追加して、エディット コンティニュを有効にします。 エディット コンティニュの詳細については、「エディット コンティニュの構成 (C#、VB、C++)」を参照してください。

if(MSVC)
  target_compile_options(<target> PUBLIC "/ZI")
  target_link_options(<target> PUBLIC "/INCREMENTAL")
endif()

Linux で実行されている CMake プロジェクトにアタッチする

Visual Studio を使用すると、リモートの Linux システムまたは WSL で実行されているプロセスをデバッグし、GDB デバッガーでデバッグすることができます。 開始するには、[デバッグ]>[プロセスにアタッチ...] を選択し、[接続の種類][SSH] に設定して、接続マネージャーの接続の一覧から接続先を選択します。 利用可能なプロセスの一覧からプロセスを選択し、[アタッチ] をクリックします。 GDB は Linux マシンにインストールする必要があります。 SSH 接続の詳細については、接続マネージャーに関する記事を参照してください

Visual Studio の [プロセスにアタッチ] メニューのスクリーンショット。

ダイアログには、[接続の種類] ([SSH] に設定されています)、[接続ターゲット] (demo@ 172. 20. 60. 6 に設定されています)、およびアタッチできる使用可能なプロセスの一覧の各オプションがあります。"

CMake の部分的なアクティブ化

Visual Studio 2022 バージョン 17.1 以降では、ルート フォルダーに CMakeLists.txt ファイルが含まれていない場合、CMake 機能は自動的に有効になりません。 代わりに、プロジェクトで CMake 機能を有効にするかどうかを確認するダイアログが表示されます。 拒否した場合、CMake キャッシュの生成は開始されず、(CMakeSettings.json または CMakePresets.json の) CMake 構成は構成ドロップダウンに表示されません。 受け入れた場合、(.vs ディレクトリに保存されている) ワークスペースレベルの構成ファイル CMakeWorkspaceSettings.json に移動するので、CMake を有効にする対象のフォルダーを指定します (これらのフォルダーにはルート CMakeLists.txt ファイルが含まれています)。

指定できるプロパティは次のとおりです。

プロパティ 説明
enableCMake このワークスペースで Visual Studio の統合を有効にします。
sourceDirectory CMakeLists.txt がある 1 つまたは複数のディレクトリを指定する文字列または文字列の配列。 (${workspaceRoot} などの) マクロを使用できます。 相対パスの基点はワークスペースのルートです。 現在のワークスペースの外部にあるディレクトリは無視されます。

CMake 機能が現在無効になっている場合でも、[プロジェクト]>[CMake ワークスペースの設定] メニュー コマンドからいつでも CMakeWorkspaceSettings.json にアクセスできます。

既存のキャッシュを開く

既存の CMake キャッシュ ファイル (CMakeCache.txt) を開くと、Visual Studio によりキャッシュとビルド ツリーの管理が試行されません。 カスタムまたは好みのツールにより、CMake でのプロジェクトの構成方法を完全に制御できます。

開いているプロジェクトに既存の CMake キャッシュを追加できます。 これは、新しい構成を追加する場合と同じ方法で行います。 詳細については、Visual Studio で既存のキャッシュを開くことに関するブログ記事を参照してください。

Note

既定の既存のキャッシュ エクスペリエンスは、バージョン 3.20 の CMake 以降で削除された cmake-server に依存しています。 Visual Studio 2019 バージョン 16.10 以降で既存のキャッシュ機能を引き続き使用するには、次のいずれかの手順を実行します。

  • CMake バージョン 3.19 以前を手動でインストールします。 次いで、ご自分の既存のキャッシュ構成の cmakeExecutable プロパティで、そのバージョンの CMake を使用するよう設定します。
  • ご自分の既存のキャッシュ構成で、cacheGenerationCommand プロパティを設定して、Visual Studio が必要な CMake ファイルベース API ファイルを要求するようにします。 このプロパティの詳細については、CMakeSettings.json リファレンスに関するページを参照してください。
  • ご自分のキャッシュを生成するときに、Visual Studio で開かれる前に、クエリ ファイルを使用して、CMake ファイルベースの API ファイルを要求します。 クエリ ファイルの手順については、次のセクション「高度な CMake キャッシュのトラブルシューティング」を参照してください。

高度な CMake キャッシュのトラブルシューティング

Visual Studio は、CMake のファイルベース API (バージョン 3.14 以降) を使用して、プロジェクト構造に固有の情報をエディターに設定します。 詳細については、マルチ ルート ワークスペースとファイル ベースの API に関する C++ チームのブログの投稿を参照してください。

CMake キャッシュを生成する前に、カスタム ツールまたは推奨ツールで、ビルド出力フォルダー (CMakeCache.txt を含むフォルダー) に .cmake/api/v1/query/client-MicrosoftVS/query.json という名前のクエリ ファイルを作成することが必要な場合があります。 クエリ ファイルには、次の内容が含まれている必要があります。

{"requests":[{"kind":"cache","version":2},{"kind":"cmakeFiles","version":1},{"kind":"codemodel","version":2}]}

カスタム ツールまたは推奨ツールでキャッシュが生成されるときに、CMake は、プロジェクト構造に固有の情報をエディターに設定するために Visual Studio が使用する .cmake/api/v1/response の下にファイルを格納します。

CMakeLists.txt ファイルの編集

CMakeLists.txt ファイルを編集するには、ソリューション エクスプローラーでファイルを右クリックして、[開く] を選択します。 ファイルを変更すると、黄色いステータス バーが表示され、IntelliSense が更新されることが示されます。 ここで更新操作を取り消すことができます。 CMakeLists.txt の詳細については、CMake のドキュメントを参照してください。

Visual Studio で編集中の CMakeLists.txt ファイルのスクリーンショット。

これには、project (hello-cmake)、add_subdirectory (tests)、add_executable (hello hello.cpp)、install (TARGETS hello DESTINATION hello/bin) の各行が含まれます。 ウィンドウの上部に、"C++ の IntelliSense 情報は、CMake がキャッシュの生成を完了した後に更新されます" というメッセージが表示されています。

ファイルを保存するとすぐに構成手順が自動的に再び実行され、[出力] ウィンドウに情報が表示されます。 エラーと警告は、[エラー一覧] または [出力] ウィンドウに表示されます。 [エラー一覧] でエラーをダブルクリックすると、CMakeLists.txt 内の問題がある行に移動します。

Visual Studio のエラー一覧での CMake エラーのスクリーンショット。

CMakeLists.txt の 3 行目の CMake エラー メッセージが強調表示されています。 詳細は、sqlite3 によって提供されるパッケージ構成ファイルを CMake が見つけられなかったという内容です。 CMake はそれを CMAKE_MODULE_PATH で探しましたが、見つかりませんでした。 インストール プレフィックス 'sqlite3' を CMAKE_PREFIX_PATH に追加するか、sqlite3_DIR を sqlite3Config.cmake や sqlitet3-config.cmake を含むディレクトリに設定することをお勧めします。

CMake の言語サービス

CMake の言語サービスは Visual Studio 2019 バージョン 16.5 以降で使用できます。 CMake スクリプト ファイル内の CMake 変数、関数、ターゲットに対して [定義へ移動]、[定義をここに表示]、[すべての参照の検索] などのコード ナビゲーション機能がサポートされています。 詳細については、「Code Navigation for CMake Scripts」(CMake スクリプトのコードナビゲーション) を参照してください。

Visual Studio の [すべての参照の検索] ウィンドウのスクリーンショット。

SUPERTUX_SOURCES_CXX が見つかった場所の結果が表示されています。 たとえば、list(SORT SSUPERTUX_SOURCES_CXX) や file(GLOB SUPERTUX_SOURCES_CXX) などです。

CMake プロジェクトの操作

CMake プロジェクトの操作は Visual Studio 2019 バージョン 16.5 以降で使用できます。 プロジェクトの操作により、CMake スクリプトを手動で編集することなく、CMake プロジェクトのソース ファイルとターゲットを追加、削除、名前変更できるようになります。 ソリューション エクスプローラーからファイルを追加または削除すると、Visual Studio によって CMake プロジェクトが自動的に編集されます。 CMake スクリプトへの参照を追加または削除することが理にかなっている複数の場所がある可能性があります。 その場合、Visual Studio は変更を行う場所を確認し、提案された変更のプレビューを表示します。 詳しい手順については、「Add, Remove, and Rename Files and Targets in CMake Projects」(CMake プロジェクトでのファイルとターゲットの追加、削除、および名前の変更) を参照してください。

Visual Studio の [変更のプレビュー] ダイアログ ボックスのスクリーンショット。

ツリー ビューに CMakeLists.txt が示されており、その下に 2 つの項目 add_executable と set があります。 set がオンになっています。 プレビュー ウィンドウでは、変更が行われる場所が示されています。 set (PROJECT_SRC "CmakeProject4.cpp" "CMakeProject4.h" の行で、閉じかっこの前の "Demo.cpp" が強調表示されています。 [適用] ボタンで変更を受け入れるか、[キャンセル] を選択できます。

CMake プロジェクト用の IntelliSense

既定では、Visual Studio は、アクティブな CMake 構成で指定されたコンパイラとターゲット アーキテクチャに一致する IntelliSense モードを使用します。

CMakePresets.json がアクティブな CMake 構成ファイルである場合は、Visual Studio の設定のベンダー マップで intelliSenseModeintelliSenseOptions を使用して IntelliSense オプションを指定できます。 詳細については、Visual Studio 設定ベンダー マップのリファレンスを参照してください。

CMakeSettings.json がアクティブな CMake 構成ファイルである場合は、CMakeSettings.jsonintelliSenseMode を使用して IntelliSense オプションを指定できます。 詳細については、「CMakeSettings.json リファレンス」を参照してください。

CMake ツールチェーン ファイルを使用して IntelliSense を構成する

Visual Studio 2019 バージョン 16.9 以降では、CMake ツールチェーン ファイルを使用すると、Visual Studio によって CMake プロジェクトで CMake 変数に基づいて IntelliSense が自動的に構成されます。 詳細については、CMake ツールチェーン ファイルを使った IntelliSense の構成に関する記事を参照してください。

Vcpkg の統合

Visual Studio で開かれた CMake プロジェクトは、クロスプラットフォームの C/C++ 依存関係マネージャーである vcpkg と統合します。 Visual Studio で vcpkg を使用する前に、vcpkg integrate install を実行する必要があります。 vcpkg の手順と詳細については、次をご覧ください。

CMakeSettings.json がアクティブな構成ファイルである場合は、Visual Studio によって vcpkg ツールチェーン ファイル (vcpkg.cmake) が CMake に自動的に渡されます。 CMake 設定の構成でその他のツールチェーンを指定すると、この動作は自動的に無効になります。

CMakePresets.json がアクティブな構成ファイルである場合は、CMakePresets.json でパスを vcpkg.cmake に設定する必要があります。 ファイルを共有可能な状態に保つには、絶対パスではなく VCPKG_ROOT 環境変数を使用することをお勧めします。 詳細については、CMake プリセットを使用した vcpkg 統合の有効化に関する記事を参照してください。 CMakePresets.json は Visual Studio 2019 バージョン 16.10 以降で使用でき、推奨される CMake 構成ファイルです。

コマンド ラインから CMake を実行する

CMakePresets.json がアクティブな CMake 構成ファイルである場合は、Visual Studio の外部でローカル ビルドを簡単に再現できます。 詳細については、「コマンド ラインまたは CI パイプラインから CMake を実行する」を参照してください。 CMakePresets.json は Visual Studio 2019 バージョン 16.10 以降でサポートされており、推奨される CMake 構成ファイルです。

CMakeSettings.json がアクティブな CMake 構成ファイルである場合は、CMakeSettings.json ファイルでエンコードされた引数を CMake に手動で渡す必要があります。 Visual Studio インストーラーから CMake をインストールした場合は、次の手順に従ってコマンド ラインから実行できます。

  1. 適切な vsdevcmd.bat ファイル (x86/x64) を実行します。 詳細については、コマンド ラインでのビルドに関するページを参照してください。

  2. 出力フォルダーに移動します。

  3. CMake を実行してアプリをビルドまたは構成します。

Visual Studio 2017 では、クロスプラットフォーム CMake プロジェクトなど、CMake のサポートが充実しています。 CMake の Visual C++ ツール コンポーネントでは、フォルダーを開く機能を使用して、IntelliSense および参照の目的で、IDE が CMake プロジェクト ファイル (CMakeLists.txt など) を直接使用できるようにします。 Ninja と Visual Studio ジェネレーターはどちらもサポートされています。 Visual Studio ジェネレーターを使用すると、一時プロジェクト ファイルが生成され、MSBuild に渡されます。 ただし、プロジェクトが IntelliSense や参照の目的で読み込まれることはありません。 また、既存の CMake キャッシュをインポートすることもできます。

インストール

CMake の Visual C++ ツールは、C++ によるデスクトップ開発および C++ による Linux 開発のワークロードの一部としてインストールされます。

Visual Studio インストーラーのスクリーンショット。[個別のコンポーネント] タブが選択され、そこで [CMake の Visual C++ ツール] が選択されています。

詳細については、「Install the C++ Linux workload in Visual Studio」(Visual Studio で C++ の Linux ワークロードをインストールする) を参照してください。

IDE 統合

[ファイル] > [開く] > [フォルダー] を選んで、CMakeLists.txt ファイルを含むフォルダーを開くと、次のことが行われます。

  • Visual Studio は、CMake スクリプトを表示および編集するためのコマンドを含む [CMake] メニュー項目を、メイン メニューに追加します。

  • ソリューション エクスプローラーに、フォルダーの構造とファイルが表示されます。

  • Visual Studio は CMake を実行して、既定の "構成" (x86 デバッグ) 用の CMake キャッシュをオプションで生成します。 CMake コマンドラインおよび CMake からのその他の出力が、出力ウィンドウに表示されます。

  • Visual Studio は、IntelliSense、情報の参照、リファクタリングなどを有効にするためのソース ファイルのインデックス付けを、バックグラウンドで開始します。 ユーザーが作業を行っている間、Visual Studio は、エディターおよびディスク上での変更を監視し、インデックスとソースの同期を維持します。

開くフォルダーに含まれる CMake プロジェクトの数は制限されていません。 Visual Studio は、ワークスペース内にあるすべての "ルート" CMakeLists.txt ファイルを検出して構成します。 CMake の操作 (構成、ビルド、デバッグ)、C++ の IntelliSense、および参照は、ワークスペース内のすべての CMake プロジェクトで使用できます。

Visual Studio のソリューション エクスプローラーのスクリーンショット。

CMake プロジェクトのファイルとフォルダーが表示されています。 tests サブディレクトリ、CMakeLists.txt、hello.cpp があります。 CMakeLists.txt、CMakeSettings.json、hello.cpp を含む hello-cmake-vcpkg フォルダーがあります。

ターゲットごとに論理的にまとめられたプロジェクトを参照することも可能です。 ソリューション エクスプローラー ツールバーのドロップダウンから、[ターゲット ビュー] を選択します。

[CMake ターゲット ビュー] オプションが含まれる Visual Studio ソリューション エクスプローラーのドロップダウン ボタンのスクリーンショット。それが選択されています。

Visual Studio は CMakeSettings.json という名前のファイルを使用して、環境変数または CMake のコマンドライン オプションを格納します。 CMakeSettings.json では、複数の CMake ビルド構成を定義して格納することもできます。 それらは IDE 内で簡単に切り替えることができます。

それ以外の場合は、CMake プロジェクトと同じように CMakeLists.txt を使用してソース ファイルを指定し、ライブラリを見つけ、コンパイラとリンカーのオプションを設定し、その他のビルド システムの関連情報が指定されます。

デバッグ時に実行可能ファイルに引数を渡す必要がある場合は、launch.vs.json と呼ばれる別のファイルを使用することができます。 場合によっては、これらのファイルは Visual Studio によって自動的に生成されます。 それらを手動で編集することも、自分でファイルを作成することもできます。

Note

他の種類の "フォルダーを開く" プロジェクトには、CppProperties.jsontasks.vs.json の 2 つの追加の JSON ファイルが使用されます。 これらはいずれも CMake プロジェクトには関連していません。

既存のキャッシュをインポートする

ユーザーが既存の CMakeCache.txt ファイルをインポートすると、Visual Studio はカスタマイズされた変数を自動的に抽出し、それを基にして事前設定済みの CMakeSettings.json ファイルを作成します。 元のキャッシュは、いかなる形でも変更されません。 これは、引き続きコマンド ラインから使用することも、その生成に使用したツールまたは IDE で使用することもできます。 新しい CMakeSettings.json ファイルは、プロジェクトのルートの CMakeLists.txt と共に配置されます。 Visual Studio は、設定ファイルに基づいて新しいキャッシュを生成します。 キャッシュの自動生成は、[ツール] > [オプション] > [CMake] > [全般] ダイアログでオーバーライドできます。

キャッシュ内のすべてのものがインポートされるわけではありません。 ジェネレーターや、コンパイラの場所などのプロパティは、IDE で問題なく機能することがわかっている既定値に置き換えられます。

既存のキャッシュをインポートするには

  1. メイン メニューから [ファイル] > [開く] > [CMake] を選択します。

    Visual Studio のメイン メニューのスクリーンショット。[ファイル] > [開く] > [CMake] が選ばれています。

    このコマンドにより、キャッシュからの CMake のインポート ウィザードが起動します。

  2. インポートする CMakeCache.txt ファイルに移動し、[OK] を選択します。 [キャッシュから CMake のプロジェクトをインポートします] ウィザードが表示されます。

    [キャッシュから CMake のプロジェクトをインポートします] ウィザードのスクリーンショット。インポートする CMake プロジェクトのディレクトリ パスが、[フォルダー] ボックスに表示されています。

    ウィザードが完了すると、ソリューション エクスプローラーでプロジェクトのルート CMakeLists.txt ファイルの隣に新しい CMakeCache.txt ファイルが表示されます。

CMake プロジェクトのビルド

CMake プロジェクトをビルドするには、次の選択肢があります。

  1. [全般] ツールバーで、[構成] ドロップダウンを見つけます。 既定では、おそらく "Linux-Debug" または "x64-Debug" が表示されます。 希望する構成を選択して、F5 キーを押すか、ツール バーの [実行] (緑色の三角形) ボタンを選択します。 Visual Studio ソリューションと同じように、プロジェクトは最初に自動的にビルドされます。

  2. ソリューション エクスプローラーCMakeLists.txt を右クリックして、コンテキスト メニューから [ビルド] を選択します。 フォルダー構造内に複数のターゲットがある場合は、すべてをビルドするか、特定の 1 つのターゲットだけをビルドするかを選べます。

  3. メイン メニューから、[ビルド] > [ソリューションのビルド] (F7 または Ctrl + Shift + B キー) を選択します。 [全般] ツール バーの [スタートアップ アイテム] ドロップダウンで CMake ターゲットが既に選択されていることを確認します。

Visual Studio ソリューション エクスプローラーで CMakeLists.txt を右クリックした後のスクリーンショット。

メニューには、[追加]、[開く]、[タスクの構成]、[ビルド]、[すべてクリーンアップ] などのオプションがあります。

CMakeSettings.json ファイル内のビルド構成、環境変数、コマンドライン引数、およびその他の設定をカスタマイズできます。 これにより、CMakeLists.txt ファイルを変更することなく、変更を行うことができます。 詳細については、「Customize CMake settings」 (CMake 設定のカスタマイズ) を参照してください。

想像したとおり、ビルド結果が出力ウィンドウエラー一覧に表示されます。

Visual Studio の [エラー一覧] ウィンドウのスクリーンショット。

浮動小数点数から整数への変換など、データが失われる可能性がある変換に関する CMake ビルドの警告が表示されています。

フォルダーに複数のビルド ターゲットがある場合は、[CMake] メニューまたは CMakeLists.txt のコンテキスト メニューで [ビルド] 項目を選び、ビルドのターゲットにする CMake を指定できます。 CMake プロジェクトで Ctrl + Shift + B を入力すると、現在アクティブなドキュメントがビルドされます。

CMake プロジェクトのデバッグ

CMake プロジェクトをデバッグするには、対象の構成を選択して、F5 キーを押します。 または、ツール バーの [実行] ボタンを押します。 [実行] ボタンに [スタートアップ アイテムの選択] と表示されている場合は、ドロップダウン矢印を選んで、実行するターゲットを選びます (CMake プロジェクトでは、[現在のドキュメント] オプションは .cpp ファイルの場合にのみ有効です)。

CMake プロジェクトの [スタートアップ アイテムの選択] ドロップダウンのスクリーンショット。現在のドキュメントまたは hello-cmake.exe を選択できます

[実行] または F5 コマンドを選ぶと、前回のビルドの後で何かが変更されている場合は、最初にプロジェクトがビルドされます。

launch.vs.json ファイルでプロパティを設定することで、CMake デバッグ セッションをカスタマイズすることができます。 詳細については、CMake デバッグ セッションの構成に関するページを参照してください。

CMakeLists.txt ファイルの編集

CMakeLists.txt ファイルを編集するには、ソリューション エクスプローラーでファイルを右クリックして、[開く] を選択します。 ファイルを変更すると、黄色いステータス バーが表示され、IntelliSense が更新されることが示されます。 ここで更新操作を取り消すことができます。 CMakeLists.txt の詳細については、CMake のドキュメントを参照してください。

Visual Studio で編集中の CMakeLists.txt ファイルのスクリーンショット。

このファイルには、project (hello-cmake)、add_subdirectory (tests)、add_executable (hello hello.cpp)、install (TARGETS hello DESTINATION hello/bin) が含まれます。 ウィンドウの上部に、"C++ の IntelliSense 情報は、CMake がキャッシュの生成を完了した後に更新されます" というメッセージが表示されています。

ファイルを保存するとすぐに構成手順が自動的に再び実行され、[出力] ウィンドウに情報が表示されます。 エラーと警告は、[エラー一覧] または [出力] ウィンドウに表示されます。 [エラー一覧] でエラーをダブルクリックすると、CMakeLists.txt 内の問題がある行に移動します。

Visual Studio のエラー一覧での CMake エラーのスクリーンショット。

CMakeLists.txt の 3 行目の CMake エラー メッセージが強調表示されています。 詳細は、sqlite3 によって提供されるパッケージ構成ファイルを CMake が見つけられないという内容です。 CMake はそれを CMAKE_MODULE_PATH で探しましたが、見つかりませんでした。 インストール プレフィックス 'sqlite3' を CMAKE_PREFIX_PATH に追加するか、sqlite3_DIR を sqlite3Config.cmake や sqlitet3-config.cmake を含むディレクトリに設定することをお勧めします。

CMake の構成ステップ

CMakeSettings.json または CMakeLists.txt ファイルが大幅に変更されると、Visual Studio により CMake の構成ステップが自動的に再実行されます。 構成ステップがエラーなしで完了すると、収集された情報が、C++ IntelliSense および言語のサービスで使用できるようになります。 ビルドおよびデバッグの操作でも使用されます。

複数の CMake プロジェクトで、同じ CMake 構成名 (x86-Debug など) を使う場合があります。 その構成が選択されると、これらのすべてが構成され、(独自のビルド ルート フォルダー内で) ビルドされます。 その CMake 構成に参加しているすべての CMake プロジェクトから、ターゲットをデバッグすることができます。

Visual Studio のメイン メニューのスクリーンショット。[CMake] > [ビルドのみ] が開かれています。

コンテキスト メニューでは、ビルドできるものが示されます: この場合は、hello-cmake-a\hello-cmake.exe (プロジェクト hello-cmake) と hello-cmake-b\hello-cmake.exe (プロジェクト hello-cmake)。 後者が強調表示されています。

ビルドとデバッグのセッションは、ワークスペース内のプロジェクトのサブセットに制限できます。 CMakeSettings.json ファイルに一意の名前を持つ新しい構成を作成します。 その後、これらのプロジェクトにのみ構成を適用します。 その構成が選択されると、IntelliSense およびビルドとデバッグの両コマンドは、指定されているプロジェクトにのみ適用されます。

CMake キャッシュ エラーのトラブルシューティング

問題を診断するために CMake キャッシュの状態に関する詳しい情報が必要な場合は、[CMake] メイン メニュー、またはソリューション エクスプローラーCMakeLists.txt のコンテキスト メニューを開き、次のコマンドのいずれかを実行します。

  • [キャッシュの表示] を使用すると、ビルド ルート フォルダーの CMakeCache.txt ファイルがエディターで開かれます。 (ここで CMakeCache.txt に対して編集した内容はすべて、キャッシュを消去するとワイプされます。キャッシュが消去された後も存続する変更を行うには、「CMake 設定をカスタマイズする」を参照してください。)

  • [キャッシュ フォルダーを開く] は、エクスプローラー ウィンドウでビルド ルート フォルダーを開きます。

  • [キャッシュをクリーン] は、次の CMake 構成ステップがクリーンなキャッシュから開始されるように、ビルド ルート フォルダーを削除します。

  • [キャッシュを生成] は、Visual Studio が環境は最新の状態であると判断した場合でも、生成ステップを強制的に実行します。

キャッシュの自動生成は、[ツール] > [オプション] > [CMake] > [全般] ダイアログで無効にできます。

単一ファイルのコンパイル

CMake プロジェクトで単一ファイルをビルドするには、ソリューション エクスプローラーでファイルを右クリックします。 ポップアップ メニューから [コンパイル] を選択します。 メインの [CMake] メニューを使用すると、エディターで現在開いているファイルをビルドすることも可能です。

[CMake] > [コンパイル] コンテキスト メニューのスクリーンショット。Bullet3Collision という 1 つのエントリが含まれています。

コマンド ラインから CMake を実行する

Visual Studio インストーラーから CMake をインストールした場合は、次の手順に従ってコマンド ラインから実行できます。

  1. 適切な vsdevcmd.bat ファイル (x86/x64) を実行します。 詳細については、コマンド ラインでのビルドに関するページを参照してください。

  2. 出力フォルダーに移動します。

  3. CMake を実行してアプリをビルドまたは構成します。

Visual Studio 2015 では、Visual Studio のユーザーは CMake ジェネレーターを使って MSBuild プロジェクト ファイルを生成し、IDE はそのファイルを IntelliSense、参照、およびコンパイルに使っていました。

関連項目

チュートリアル: Visual Studio で C++ クロスプラットフォーム プロジェクトを作成する
Linux CMake プロジェクトを構成する
リモートの Linux コンピューターに接続する
CMake のビルド設定をカスタマイズする
CMakeSettings.json スキーマ リファレンス
CMake デバッグ セッションを構成する
Linux プロジェクトの配置、実行、デバッグ
CMake 定義済み構成リファレンス
CMake プロジェクトでの vcpkg
Visual Studio の CMake でパッケージをインストールして使用する