【vscode】c/c++の環境構築でつまづいたところ

プログラミング

ラズパイピコでLチカするためのサンプルプログラムを開いて出た簡単目な
エラーへの対処でめっちゃ時間かかっちゃった

①stdio.hが見つからない

該当行

問題タブに表示されたメッセージ

#include エラーが検出されました。includePath を更新してください。この翻訳単位 (C:\Users\xxxx\xxxx\blink.c) では、波線が無効になっています。

ソース ファイル “stdio.h” を開けませんでした (検索リストにディレクトリがありません). システム ヘッダーを見つけるには、’IntelliSense 構成の選択…’ コマンドを実行してください。

つまり「VSCodeのインテリセンス(コード補完)がヘッダーファイルが見つけられないからincludePathを更新しろ」ということらしい。

対処

ctrl+shift+Pでコマンドを入力するやつを開いて
「C/C++: IntelliSense 構成の選択」を探してクリック

コンパイラがなにもサジェクトされないから
「コンピューター上の別のコンパイラを選択…」をクリック

ファイルを指定するウィンドウが出てきたら、
PCのどっかにある
arm-none-eabi-gcc.exeってexeファイルを指定する

ここまで手順が一緒だったら絶対どっかにあるから頑張って探して

②pico/stdlib.hが見つからない

該当行

問題タブに表示されたメッセージ

#include エラーが検出されました。includePath を更新してください。この翻訳単位 (C:\Users\xxxx\xxxx\blink.c) では、波線が無効になっています。

ソース ファイルを開けません “pico/stdlib.h”

↓ includePathにそれっぽいパスを追加していったら

ソース ファイルを開けません “pico/version.h” (dependency of “C:\Users\xxx\.vscode\extensions\ms-vscode.cpptools-1.24.5-win32-x64\bin\pico\stdlib.h”)

そもそも”xxx/pico/version.h”って階層にversion.hなんて入ってない。

原因

version.hはsdkをビルドしたら作られるファイルだった。

勘違い。

対処

プロジェクトフォルダ内にbuildフォルダを作ってそこにビルドの成果物を入れる

③ビルドが失敗しまくる

コマンド

ビルドの設定を作る

cmake -G "Ninja" ..

エラー

PICO_SDK_PATH is C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk
PICO platform is rp2040.
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
-- The ASM compiler identification is unknown
-- Didn't find assembler
CMake Error at CMakeLists.txt:7 (project):
  No CMAKE_C_COMPILER could be found.

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:7 (project):
  No CMAKE_CXX_COMPILER could be found.

  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:7 (project):
  No CMAKE_ASM_COMPILER could be found.

  Tell CMake where to find the compiler by setting either the environment
  variable "ASM" or the CMake cache entry CMAKE_ASM_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.

原因① Raspberry Pi Pico用のクロスコンパイラ(arm-none-eabi-gcc)がCMakeから見えていない

エラーメッセージを見るに本来はこれが原因のエラー何だと思う。

でも自分が出くわしたのはこの原因じゃなかったから対処方法はわからない。

原因② ビルドを失敗したときのキャッシュが邪魔してる

そのまま。なにが悪さしてるのか具体的にはわからなかったけど。

対処

buildしたときに作られたものを全部消す。

なぜかビルドが通った。

④json上で環境変数が通らない

原因

環境変数に登録してなかった。ウケる。

対処

スタートメニューで「システム環境変数の編集」を選択

システム環境変数に追加したかった環境変数を追加

今回は「PICO_SDK_PATH」という変数名でpico-sdkフォルダを指定

自分の認識が間違っていたこと/知らなかったこと

sdkはどっかに置いて適当に参照すればいいわけじゃなかった。

sdk一式はどこか1カ所に置いておけばいいけど、
プロジェクトを作るたびにdskをビルドして、その生成物をプロジェクトフォルダとかワークスペースに置いて使うものだった。

これのメリットは

  • sdkの更新が一括で済む
  • 色んなプロジェクト間で同じバージョンを使えて整合性が保てる
  • 管理がしやすい

ツールチェイン

ソースコードを目的のハードウェア向けにコンパイルして動くバイナリを作る一式の道具
とのこと

↓一般的に含まれるもの

arm-none-eabi-gccCコンパイラ(GCC)
arm-none-eabi-g++C++コンパイラ
arm-none-eabi-asアセンブラ
arm-none-eabi-ldリンカ
arm-none-eabi-objcopyバイナリの変換(.binや.hexの生成)
arm-none-eabi-gdbデバッグツール

タイトルとURLをコピーしました