techno_memo

個人用の技術メモ。python・ROS・AI系のソフトウェア・ツールなどの情報を記載

Visual Studio Code C言語開発環境の設定 (Linux/gcc)

この記事の目的

Visual studio codeを用いてLinux上でgccを用いたC言語開発をする時の設定方法について記述する。

1. 必要なツールのインストール

下記コマンドでgcc(build-essentialはコンパイラ・ライブラリ・makeツール)、gdb(デバッグ用ツール)をインストールする

sudo apt install build-essential
sudo apt install gdb

Visual studio codeには下記拡張機能をインストールする。

2. make環境の構築(makffile)

VS codeにはC言語プロジェクト用にビルド設定する機能があるが、本機能で環境構築するとプロジェクトのビルドがターミナルから実行できない。 よって、GNU makefileでビルド環境を構築し、VS codeでは拡張機能makefiletoolでそれを読み込んで実行できるようにする。

makefileの設定は下記サイト等を参考に行う。

urin.github.io

www.ecoop.net

本記事では例として、下記の2つのcファイルと1つのヘッダファイルについてmakefileの設定を記述する。

main.c

#include <stdlib.h>
#include <stdio.h>
#include "func.h"

int main(void) 
{
    int indx =0;
    for (indx=0; indx<5000; indx++) {
        fprintf(stderr,"count: %d\n",func(indx));
    }
    return 0;
}

func.c

#include <stdlib.h>
#include <stdio.h>

int func(int cnt) 
{
    return cnt*2;
}

include/func.h

#ifndef FUNC_H
#define FUNC_H

int func(int cnt);

#endif  //FUNC_H

makefile

#生成する実行ファイル名
TARGET = testPrj
#.oファイル生成用の中間フォルダ
OBJSDIR = ./Objs
#ヘッダインクルードフォルダ
MYINCDIR = ./include

#コンパイル対象とするCファイル
OBJS =   main.o \
       func.o\

#コンパイル用コマンド (c++ならばg++に変更)
CC = gcc
#Wall:警告をすべて出力、-g:デバッグ情報出力、GNU_SOURCE:非標準拡張機能の有効化
CFLAGS = -Wall -g -std=c99 -D_GNU_SOURCE
#lm:算術計算ライブラリ有効化
LDFLAGS = -lm
INCDIR = -I$(MYINCDIR)

OBJS_ALL = $(addprefix $(OBJSDIR)/, $(OBJS))

all:
  mkdir -p $(OBJSDIR)
  make $(TARGET)

$(OBJS): %.o: %.c
  $(CC) $(CFLAGS) -c $< $(INCDIR) -o $@
  mv $@ $(OBJSDIR)/$@

$(TARGET): $(OBJS)
  $(CC) -o $@ $(OBJS_ALL) $(LDFLAGS)

clean:
  rm -f *.o
  rm -f $(OBJSDIR)/*.o
  rm $(TARGET)

ターミナルで下記コマンドを実行すると、正しくビルド・実行できるかを確認できる。

make
sudo ./testPrj

3. VS codeの makefiletools設定

上記を設定後、Visual studio codeからbuildができるようにmakefileとリンク設定する。 makefileの設定はVS codeの『ファイル』⇛『ユーザー設定』⇛『設定』で検索バーに"makefile"と入力すると出てくる画面で"makefile:Configurations"を選択する。ここで、設定に保存先として"ユーザー"ではなく"ワークスペース"に切り替えておいたほうが良い。 上記手順後に表示されるsettings.jsonmakefile.configurationsで下記のように記述する。

    "makefile.configurations": [
        {
            "name": "testprj",
            "makeDirectory": "./prj"
        }
    ]

上記でnameはmake設定の識別名、makeDirecgtoryはmakefile相対パス(VS codeのルート設定フォルダから)を記入する。 上記設定後、拡張機能mekefile toolsのbuilt対象をtesprjに変更して実行ボタンを押すとVS codeからプロジェクトのビルドが可能になる。

f:id:sd08419ttic:20210919170238p:plain

4. インクルードパスの設定

VS codeではソースコードを分析してエラー・警告を表示する機能があるがインクルードパスが適切に設定されていないと正しい探索が行われない。 インクルードパスの設定をするためにコマンドパレットから『C/C++構成の編集(JSON)』を選択し、"includePath"にヘッダファイルがあるフォルダを追加する。

            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/prj/include"
            ],

4. デバッグ環境設定

コードの実行中の変数値の確認、ブレークポイントを用いたデバッグを実行するため、GDBの設定を行う。 VS code左側の拡張機能から『実行とデバッグ』を選択し、『launch.json』ファイルを作成しますボタンを押し、C++/GDB用のjsonを作成する。

作成された設定のプログラムのパスを変更する。

    "configurations": [
        {
            "name": "(gdb) 起動",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/prj/testPrj",
            以下略
         }
    ]

上記を設定後にgdbの起動メニューを実行すると、break pointを使ったデバッグ、変数値の確認がVS Code上からできるようになる。 f:id:sd08419ttic:20210919174010p:plain