C++ 拡張機能の設定リファレンス

C++ 拡張機能の設定は高度に構成可能です。この記事では、c_cpp_properties.json ファイルのスキーマについて説明します。VS Code の設定に関する一般的な情報については、設定の構成変数リファレンス、およびデフォルトの VS Code 設定を参照してください。

C++ プロジェクトの構成を始めたいですか?まずIntelliSense の構成から始めてください。

変数の例

以下に示す JSON スニペットは、c_cpp_properties.json の構成例です。JSON ファイルには関連する変数のみを含めればよく、不足しているフィールドは C++ 拡張機能によってデフォルト値が自動的に入力されます。

{
  "env": {
    "myIncludePath": ["${workspaceFolder}/include", "${workspaceFolder}/src"],
    "myDefines": ["DEBUG", "MY_FEATURE=1"]
  },
  "configurations": [
    {
      "name": "Mac",
      "compilerPath": "/usr/bin/clang++",
      "intelliSenseMode": "macos-clang-x64",
      "includePath": ["${myIncludePath}", "${workspaceFolder}/**"],
      "defines": ["${myDefines}"],
      "cStandard": "c17",
      "cppStandard": "c++20",
      "macFrameworkPath": ["/System/Library/Frameworks", "/Library/Frameworks"],
      "browse": {
        "path": ["${myIncludePath}", "${workspaceFolder}"]
      }
    }
  ],
  "version": 4,
  "enableConfigurationSquiggles": true
}

トップレベルプロパティ

  • env: 標準の環境変数構文 (${<var>} または ${env:<var>}) を介して構成内で置換に利用できる、ユーザー定義変数の配列。文字列と文字列の配列が受け入れられます。

  • configurations: IntelliSense エンジンにプロジェクトに関する情報とユーザーの好みを伝える構成オブジェクトの配列。デフォルトでは、拡張機能はオペレーティングシステムに基づいて構成を作成します。また、複数の構成を追加することもできます。

  • version: このフィールドは編集しないことをお勧めします。これはc_cpp_properties.json ファイルの現在のバージョンを追跡し、拡張機能がどのプロパティと設定が存在すべきか、およびこのファイルを最新バージョンにアップグレードする方法を認識できるようにします。

  • enableConfigurationSquiggles: c_cpp_properties.json ファイルで検出されたエラーを C++ 拡張機能に報告するには、true に設定します。

構成プロパティ

  • name: 構成を識別するユーザーフレンドリーな名前。LinuxMac、および Win32 は、それぞれのプラットフォームで自動選択される構成の特殊な識別子です。VS Code のステータスバーには、アクティブな構成が表示されます。ステータスバーのラベルを選択して、アクティブな構成を変更することもできます。

  • compilerPath: より正確な IntelliSense を有効にするために、プロジェクトのビルドに使用するコンパイラへの完全なパス (例: /usr/bin/gcc)。拡張機能はコンパイラに問い合わせて、IntelliSense に使用するシステムインクルードパスとデフォルトの定義を決定します。

    "compilerPath": "" (空文字列) を指定すると、コンパイラへの問い合わせはスキップされます。これは、推奨するコンパイラが問い合わせに使用される引数をサポートしていない場合に役立ちます。その場合、拡張機能は検出できるサポートされているコンパイラ (MSVC など) をデフォルトとして使用します。compilerPath プロパティを省略しても、問い合わせはスキップされません。

  • compilerArgs: 使用されるインクルードパスまたは定義を変更するためのコンパイラ引数 (例: -nostdinc++-m32 など)。スペースで区切られた追加の引数を取る引数は、配列内の個別の引数として入力する必要があります。例: --sysroot <arg> の場合は \"--sysroot\", \"<arg>\" を使用します。

  • intelliSenseMode: MSVC、gcc、または Clang のアーキテクチャ固有のバリアントにマッピングされる IntelliSense モード。設定されていない場合、または ${default} に設定されている場合、拡張機能はそのプラットフォームのデフォルトを選択します。

    プラットフォームのデフォルト

    • Windows: windows-msvc-x64
    • Linux: linux-gcc-x64
    • macOS: macos-clang-x64

    IntelliSense モードで <compiler>-<architecture> のバリアント (例: gcc-x64) のみが指定されている場合、それはレガシーモードであり、ホストプラットフォームに基づいて自動的に <platform>-<compiler>-<architecture> のバリアントに変換されます。

  • includePath: インクルードパスとは、ソースファイルによってインクルードされるヘッダーファイルが格納されているディレクトリです。例えば、ソースファイルにインクルードディレクティブ #include "myHeaderFile.h" が含まれている場合、このヘッダーファイルのパスを includePath に追加します。IntelliSense エンジンがインクルードされたヘッダーファイルを検索する際に使用するパスのリストを指定します。これらのパスでの検索は再帰的ではありません。パスの最後に /** を指定すると、再帰的検索を示します。例えば、${workspaceFolder}/** はすべてのサブディレクトリを検索しますが、${workspaceFolder} は検索しません。Visual Studio がインストールされている Windows を使用している場合、または compilerPath 設定でコンパイラが指定されている場合、システムインクルードパスはここにリストすべきではありません。

  • defines: IntelliSense エンジンがファイルを解析する際に使用するプリプロセッサ定義のリスト。オプションで、= を使用して値を設定できます (例: VERSION=1)。

  • cStandard: IntelliSense に使用する C 言語標準のバージョン。例: c17gnu23、または ${default}。注: GNU 標準は、設定されたコンパイラに問い合わせて GNU 定義を取得するためにのみ使用され、IntelliSense は同等の C 標準バージョンをエミュレートします。

  • cppStandard: IntelliSense に使用する C++ 言語標準のバージョン。例: c++20gnu++23、または ${default}。注: GNU 標準は、設定されたコンパイラに問い合わせて GNU 定義を取得するためにのみ使用され、IntelliSense は同等の C++ 標準バージョンをエミュレートします。

  • configurationProvider: ソースファイル用の IntelliSense 構成情報を提供できる VS Code 拡張機能の ID。例えば、CMake Tools 拡張機能から構成情報を提供するために、VS Code 拡張機能 ID ms-vscode.cmake-tools を使用します。configurationProvider を指定した場合、それが提供する構成は c_cpp_properties.json 内の他の設定よりも優先されます。

    configurationProvider の候補となる拡張機能は、vscode-cpptools-apiを実装している必要があります。

  • mergeConfigurations: インクルードパス、定義、および強制インクルードを構成プロバイダーからのものとマージするには、true に設定します。

  • windowsSdkVersion: Windows で使用する Windows SDK インクルードパスのバージョン (例: 10.0.17134.0)。

  • macFrameworkPath: IntelliSense エンジンが Mac フレームワークからのインクルードヘッダーを検索する際に使用するパスのリスト。

  • forcedInclude: ソースファイル内のテキストが処理される前にインクルードされるべきファイルのリスト。ファイルはリストされている順序でインクルードされます。

  • compileCommands: ワークスペースの compile_commands.json ファイルへの完全なパスを含むパスの配列。エディターで開かれているファイルに対応するエントリが compile_commands.json にある場合、c_cpp_properties.json の他のフィールドではなく、そのコマンドラインがそのファイルの IntelliSense を構成するために使用されます。ファイル形式の詳細については、Clang のドキュメントを参照してください。CMake のような一部のビルドシステムは、このファイルの生成を簡素化します。

  • dotConfig: Kconfig システムによって作成された .config ファイルへのパス。Kconfig システムは、プロジェクトのビルドに必要なすべての定義を含むファイルを生成します。Kconfig システムを使用するプロジェクトの例には、Linux Kernel や NuttX RTOS があります。

  • customConfigurationVariables: launch.json または tasks.json の入力変数として使用するために、コマンド ${cpptools:activeConfigCustomVariable} を介して照会できるカスタム変数。

  • browse: コードベース内のすべてのシンボルを識別するために IntelliSense と組み合わせて使用されるプロパティのセット。これらのプロパティは、定義/宣言へ移動、グローバルシンボル検索などの機能や、「デフォルト」の IntelliSense エンジンがソースファイル内の #includes を解決できない場合に使用されます。

  • recursiveIncludes: 拡張機能が再帰的検索を指定する includePath エントリをどのように処理するかを設定するために使用されるプロパティのセット。

閲覧プロパティ

  • path: ソースファイルが解析され、グローバルシンボル検索に使用されるパスのリスト。省略された場合、includePathpath として使用されます。これらのパスでの検索はデフォルトで再帰的です。非再帰的検索を示すには * を指定します。例えば、${workspaceFolder} はすべてのサブディレクトリを検索しますが、${workspaceFolder}/* は検索しません。

  • limitSymbolsToIncludedHeaders: true の場合、タグパーサーは、${workspaceFolder} 内のソースファイルによって直接的または間接的にインクルードされているヘッダーファイルのみを解析します。false の場合、タグパーサーは、browse.path リストで指定されたパス内で見つかったすべてのコードファイルを解析します。

  • databaseFilename: 生成されたシンボルデータベースへのパス。このプロパティは、ワークスペースのシンボルデータベースを、ワークスペースのデフォルトの保存場所とは別の場所に保存するように拡張機能に指示します。相対パスが指定された場合、それはワークスペースフォルダー自体ではなく、ワークスペースのデフォルトの保存場所を基準とします。${workspaceFolder} 変数を使用すると、ワークスペースフォルダーからの相対パスを指定できます (例: ${workspaceFolder}/.vscode/browse.vc.db)。

再帰的インクルードプロパティ

  • reduce: 再帰的な includePath エントリが展開されると、IntelliSense がソースファイル内の #include ステートメントを解決する際に処理するインクルードパスのセットが非常に大きくなる可能性があります。多数のインクルードパスを IntelliSense コンパイラに送信すると、一部のシステムで IntelliSense のパフォーマンスに影響を与える可能性があります。デフォルトでは、拡張機能は最初にソースファイルをタグ解析して #include ステートメントを検索し、どのインクルードパスが必要かを判断することで、インクルードパスのセットを可能な限り最小限に削減します。この削減プロセスは、この設定の always オプションと同じ動作です。この動作は、初期オーバーヘッドを多少犠牲にして、IntelliSense が後で高速になる可能性をもたらします。このプロパティを never に設定すると、インクルードパスの完全な再帰的展開が IntelliSense プロセスに提供されます。事前にファイルを解析しないことで、この動作は、ソースファイルが開かれたときに IntelliSense がより迅速に起動できるように、後の潜在的なパフォーマンスを犠牲にします。一般的に、構成内の再帰的インクルードパスの数を減らすと、多数のパスが関係する場合に IntelliSense のパフォーマンスが向上する可能性があります。

  • priority: #include ステートメントを解決する際の再帰的インクルードパス検索の優先順位。beforeSystemIncludes に設定されている場合、再帰的インクルードパスはシステムインクルードパスの前に検索されます。afterSystemIncludes に設定されている場合、再帰的インクルードパスはシステムインクルードパスの後に検索されます。beforeSystemIncludes はコンパイラの検索順序をより密接に反映し、より予測可能性が高まりますが、afterSystemIncludes はパフォーマンスの向上につながる可能性があります。

  • order: 再帰的インクルードのサブディレクトリが breadthFirst (幅優先) で検索されるか depthFirst (深さ優先) で検索されるか。

サポートされている変数

tasks.json または launch.jsonc_cpp_properties.json から現在アクティブな構成を照会できるようにすることができます。これを行うには、tasks.json または launch.json スクリプト内で変数 ${command:cpptools.activeConfigName} を引数として使用します。

デフォルトの VS Code 設定

C_Cpp.default.includePath などのすべてのデフォルト VS Code 設定は、c_cpp_properties.json でサポートされています。唯一の例外は次のとおりです。

C_Cpp.default.systemIncludePath : string[]

この設定を使用すると、システムインクルードパスをインクルードパスとは別に指定できます。ただし、C++ 拡張機能がコンパイラから受け取る選択されたシステムインクルードパスは、IntelliSense プロセスには渡されません。これは標準的なコンパイラの動作を上書きするため、例えばコンパイラがサポートされていない場合など、稀なシナリオでのみ使用されます。代わりに、compilerArgs 設定を使用し、-isystem フラグを使用してシステムヘッダーを指定することをお勧めします。これはほとんどのシナリオでより良い解決策です。

© . This site is unofficial and not affiliated with Microsoft.