前回は Visual Studio Code(以降VSCode)から Raspberry Piに接続するところまで進めました
今回は、 GCCのコンパイル環境及びデバッグ環境の作成を行っていきます
使い回しの出来るように、下記環境はコピー&ペーストで出来るようにしています
各ファイルの詳細は解説で行います
ディレクトリ構成
Makefileの作成
以下のテキストを”Makefile”として保存します
本Makefileは他のプロジェクトとの使い回しが出来る様に、実行ファイル名を”dbgApp”に固定しています
# Makefile for Raspberry Pi
CXX = g++
CFLAGS = -DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS \
-DTARGET_POSIX -D_LINUX -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE \
-D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -DHAVE_LIBOPENMAX=2 -DOMX \
-DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX \
-DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM \
-fPIC -ftree-vectorize -pipe -Werror -g -Wall -DDEBUG
LDFLAGS = -L/opt/vc/lib -lopenmaxil -lbcm_host -lvcos -lvchiq_arm -lpthread
LIBS =
INCLUDES = -I./include \
-I/opt/vc/include \
-I/opt/vc/include/interface/vcos/pthreads \
-I/opt/vc/include/interface/vmcs_host/linux
TARGET = ./bin/dbgApp
SRCDIR = .
SOURCES = $(wildcard $(SRCDIR)/*.cpp)
#*/
OBJDIR = ./obj
OBJECTS = $(addprefix $(OBJDIR)/, $(notdir $(SOURCES:.cpp=.o)))
$(TARGET): $(OBJECTS) $(LIBS)
-mkdir -p ./bin
$(CXX) -o $@ $^ $(LDFLAGS)
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
-mkdir -p ./obj
$(CXX) $(CFLAGS) $(INCLUDES) -o $@ -c $< -Wno-deprecated-declarations
.PHONY: all
clean:
rm -f $(TARGET) $(OBJECTS)
all: clean $(TARGET)
/opt/vc/src/hello_pi/Makefile.include
VSCodeの環境設定
「.vscode」フォルダ下に下記3つの設定ファイルを作成します
C,C++環境設定
下記内容を「c_cpp_properties.json」の名前で保存します
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/opt/vc/include/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-arm"
}
],
"version": 4
}
タスクの構成
下記内容を「tasks.json」の名前で保存します
{
"tasks": [
{
"type": "shell",
"label": "make debug",
"command": "make",
"args": [],
"options": {
"cwd": "${fileDirname}"
},
"group": {
"kind": "build",
"isDefault": true
},
}
],
"version": "2.0.0"
}
デバッグ環境設定
下記内容を「launch.json」の名前で保存します
{
"version": "0.2.0",
"configurations": [
{
"name": "gcc - makeとデバッグ",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/bin/dbgApp",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "gdb の再フォーマットを有効にする",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "make debug",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
コンパイル&実行
コンパイル及び実行には、[実行]ー[デバッグの開始]又は、[F5]キーで開始します
また、ソースコード上の一時中断させたい行で、 [実行]ー[ブレークポイントの切り替え]又は、[F9]キーで ブレークポイントを設置できます
メモリダンプを見たい場合は、ウォッチ式に以下の様に記述します(「pointer」は参照する変数名)
*(char(*)[100])poionter,h
解説
Makefile
行 | 内容 |
---|---|
2 | 使用するコンパイラの宣言 |
3~8 | コンパイルフラグ(hello_piのMakefile参照) |
9 | リンク設定(hello_piのMakefile参照) |
11~14 | インクルード先設定(hello_piのMakefile参照) |
15 | 実行ファイル(デバッグの為、ファイル名固定) |
16~17 | コンパイル対象(ルートフォルダのcppを対象) |
19~20 | 中間ファイル出力先設定 |
22~28 | make実行部 |
30 | 疑似タスク宣言 |
32,35 | 初期化、全コンパイルタスク宣言 |
C,C++環境設定
[表示]―[コマンドパレット]の「C/C++構成の編集(UI)」で作成された 「c_cpp_properties.json」 に対し、以下の変更を加えています
行 | 内容 |
---|---|
5~7 | VSCodeのインクルードフォルダ宣言(Raspberry Pi上のインクルード先を追加) |
タスク構成
下記デバッグ環境設定で作成された「tasks.json」に対し、以下の変更を加えています
行 | 内容 |
---|---|
4 | makeコマンドを実行するための「shell」を宣言 |
5 | タスク認識用の名前 |
6 | 実行コマンド「make」 |
デバッグ環境設定
[実行]―[構成の追加]より、「C++(GDB/LLDB)」―「gcc – アクティブ ファイルのビルドとデバッグ」 で作成された 「launch.json」に対し、以下の変更を加えています
行 | 内容 |
---|---|
5 | 実行とデバッグ認識用の名前 |
8 | 実行ファイル(デバッグの為、ファイル名固定) |
22 | 実行前のタスク指定(自動make実行) |