クロスコンパイルのための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))。
IntelliSense構成の例
以下は、Linux ArmをターゲットとするLinux x64ホストマシン用にC/C++拡張機能を構成する方法を示しています。次のIntelliSense設定を構成します。
- **コンパイラのパス**: 拡張機能は、システムライブラリとコンパイラ定義を取得するために、この場所でコンパイラをクエリします。
- **IntelliSenseモード**: ターゲットアーキテクチャとコンパイラをエミュレートして、拡張機能が正しいIntelliSenseを提供し、`pointer`、`size_t`、`long`などのデータ型の正しいサイズを反映できるようにします。
少なくとも、**コンパイラのパス**と**IntelliSenseモード**を設定することで、拡張機能がプロジェクトのターゲットアーキテクチャをエミュレートするのに十分な情報が提供されます。ただし、拡張機能が**コンパイラのパス**のクエリから返された定義に基づいて正しく選択できる場合は、**IntelliSenseモード**の設定は必要ない場合があります。
コンパイラのパス
プロジェクトのビルドに使用しているコンパイラのフルパスに設定します。
例:
IntelliSenseモード
使用しているコンパイラのアーキテクチャ固有のバリアントに設定します。
例:
インクルードパス
プログラムにワークスペースにない、または標準ライブラリパスにないヘッダーファイルが含まれている場合にのみ、**インクルードパス**を変更する必要があります。
C/C++拡張機能は、**コンパイラのパス**で指定されたコンパイラをクエリしてインクルードパスを設定します。拡張機能がターゲットシステムライブラリのパスを見つけられない場合は、インクルードパスを手動で入力できます。
上記の設定を指定すると、`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
}
次のステップ
- IntelliSense構成の詳細については、デフォルト設定のカスタマイズを参照してください。
- 設定の構成で問題が発生した場合は、GitHub discussionsでディスカッションを開始するか、修正が必要な問題が見つかった場合は、GitHub issuesで問題を報告してください。
- c_cpp_propertiesスキーマをご覧ください。
- C++拡張機能の概要をご確認ください。