VS Codeのエージェントモードを拡張するには、を試してください!

クロスコンパイル用IntelliSense

この記事は、開発ホストマシンとは異なるアーキテクチャ用にコンパイルする場合に、Visual Studio Code で適切なIntelliSense (コード補完など) を提供するようにC/C++拡張機能を構成する方法について説明しています。たとえば、ホストマシンがx64で、Arm用にコンパイルする場合などです。

C/C++拡張機能はコンパイラではありません。構文ハイライトやIntelliSenseなどの豊富な言語機能を提供します。拡張機能が正しいIntelliSenseの候補を提供し、データ型の正しいサイズを反映するためには、C++拡張機能をターゲットアーキテクチャをエミュレートするように構成する必要があります。

これらの構成設定は、プロジェクトのc_cpp_properties.jsonファイルに保存されます。このファイルを編集するには、VS Codeでコマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) から C/C++: 構成の編集 (UI) を選択します。

Command Palette

IntelliSense構成の例

以下は、Linux ArmをターゲットとするLinux x64ホストマシン用にC/C++拡張機能を構成する方法を示しています。以下のIntelliSense設定を構成します。

  • コンパイラパス: 拡張機能はこの場所のコンパイラをクエリして、システムライブラリとコンパイラの定義を取得します。
  • IntelliSenseモード: 拡張機能が正しいIntelliSenseを提供し、pointersize_tlongなどのデータ型の正しいサイズを反映できるように、ターゲットアーキテクチャとコンパイラをエミュレートします。

最小限の構成として、コンパイラパスIntelliSenseモードを設定することで、拡張機能がプロジェクトのターゲットアーキテクチャをエミュレートするための十分な情報が提供されます。ただし、拡張機能がコンパイラパスのクエリから返された定義に基づいてIntelliSenseモードを正しく選択できる場合は、IntelliSenseモードの設定は不要かもしれません。

コンパイラのパス

プロジェクトのビルドに使用しているコンパイラのフルパスに設定します。

Compiler path setting

IntelliSenseモード

使用しているコンパイラのアーキテクチャ固有のバリアントに設定します。

IntelliSense mode setting

インクルードパス

プログラムがワークスペース内にない、または標準ライブラリパスにないヘッダーファイルを含む場合にのみ、インクルードパスを変更する必要があります。

C/C++拡張機能は、コンパイラパスで指定されたコンパイラをクエリすることで、インクルードパスを設定します。拡張機能がターゲットシステムライブラリのパスを見つけられない場合は、インクルードパスを手動で入力できます。

Include path setting

上記の設定を適用すると、c_cpp_configuration.jsonファイルは以下のようになります。コマンドパレットから C/C++: 構成の編集 (JSON) を選択して開くことができます。

{
  "configurations": [
    {
      "name": "myConfigurationName",
      "includePath": ["${workspaceFolder}/**"],
      "defines": [],
      "compilerPath": "/usr/bin/arm-none-eabi-g++",
      "cStandard": "c11",
      "cppStandard": "c++14",
      "IntelliSenseMode": "gcc-arm"
    }
  ],
  "version": 4
}

次のステップ