🚀 VS Codeでしましょう!

クロスコンパイルのためのIntelliSense

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

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

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

Command Palette

IntelliSense構成の例

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

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

少なくとも、**コンパイラのパス**と**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
}

次のステップ