クロスコンパイル用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) を選択します。
IntelliSense構成の例
以下は、Linux ArmをターゲットとするLinux x64ホストマシン用にC/C++拡張機能を構成する方法を示しています。以下のIntelliSense設定を構成します。
- コンパイラパス: 拡張機能はこの場所のコンパイラをクエリして、システムライブラリとコンパイラの定義を取得します。
- IntelliSenseモード: 拡張機能が正しいIntelliSenseを提供し、
pointer
、size_t
、long
などのデータ型の正しいサイズを反映できるように、ターゲットアーキテクチャとコンパイラをエミュレートします。
最小限の構成として、コンパイラパスとIntelliSenseモードを設定することで、拡張機能がプロジェクトのターゲットアーキテクチャをエミュレートするための十分な情報が提供されます。ただし、拡張機能がコンパイラパスのクエリから返された定義に基づいて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++ 拡張機能の概要を確認してください。