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++: Edit Configurations (UI) を選択します。

Command Palette

IntelliSense の構成例

以下に、Linux Arm をターゲットとする Linux x64 ホストマシン用に C/C++ 拡張機能を構成する例を示します。これにより、次の IntelliSense 設定が構成されます。

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

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

コンパイラのパス

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

Compiler path setting

IntelliSense モード

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

IntelliSense mode setting

インクルード パス

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

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

Include path setting

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

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

次のステップ