クロスコンパイルのための 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) を選択します。
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++: 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
}
次のステップ
- IntelliSense の構成の詳細については、既定の設定のカスタマイズを参照してください。
- 設定の構成で問題が発生した場合は、GitHub discussions でディスカッションを開始するか、修正が必要な問題を見つけた場合は GitHub issues で問題を報告してください。
- c_cpp_properties スキーマを調べる。
- C++ 拡張機能の概要を確認してください。