クロスコンパイル用IntelliSenseの設定

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

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

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

Command Palette

IntelliSense設定例

以下は、Linux x64ホストマシンからLinux Armをターゲットにする場合のC/C++拡張機能の設定例です。ここでは以下のIntelliSense設定を行います。

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

最低限、Compiler pathIntelliSense modeを設定すれば、拡張機能がプロジェクトのターゲットアーキテクチャをエミュレートするために十分な情報が提供されます。ただし、Compiler pathをクエリした結果返される定義に基づいて拡張機能が自動的にIntelliSense modeを正しく選択できる場合は、この設定は不要なこともあります。

コンパイラパス

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

例えば

Compiler path setting

IntelliSense mode

使用しているコンパイラの、ターゲットアーキテクチャ固有のバリエーションを設定します。

例えば

IntelliSense mode setting

Include path

Include pathの変更が必要になるのは、プログラムがワークスペース内や標準ライブラリのパスに存在しないヘッダーファイルをインクルードしている場合のみです。

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

Include path setting

上記の設定を行うと、c_cpp_properties.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
}

次のステップ

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