⚙️

【Linux】Visual Studio CodeでMakefileを使ったビルドとGDB

2024/02/11に公開

とあるきっかけで、しばらく触っていなかったC/C++を触ることになり、Visual Studio CodeでMakefileを使ったビルドとGDBを使ったデバッグを行う機会がありました。LinuxでC/C++のコードを書いて、ビルドしてデバックするという流れは、お気に入りのエディタとコマンドラインでもでもできることですが、Visual Studio Codeで行うことで、デバッグがしやすくなると思います。そのため、改めて設定方法をまとめます。

はじめに

Linux用に公開されているソースコードをビルドする際に、Makefileを記述しmakeコマンドを使ってビルド、GDBを使ってデバッグすることも多いと思います。しかし、Visual Studio Codeでこれらの作業を行う際には、設定が必要です。LinuxにおいてVisual Studio CodeでC/C++のMakefileを使ってビルドし、GDBを使ってデバッグする方法をまとめます。本記事では、Makefileの記述方法などは割愛し、普段コマンドラインでmakeコマンドでビルド、gdbをコマンドラインで使っていることを前提とし、Visual Studio Codeでの設定に焦点を当てます。

前提条件

  • Visual Studio Codeがインストールされていること
  • Makefileは作成済みであり、makeコマンドでソースコードのビルドが成功すること

Makefileを使ったビルド

まず、ソースコード一式が入ったディレクトリをVisual Studio Codeで開きます。
その後、Visual Studio codeのメニューで[terminal] > [Configure Tasks...]を選択します。
そうすると、create tasks.json file from templateというメニューが表示され、それをクリックすると何個かテンプレートがリスト表示されるので、Othersを選択します。Othersを選択すると、tasks.jsonがVisual Studio Codeで開いたトップディレクトリの.vscodeフォルダ配下に作成されます。

イメージは以下のような感じです。

ディレクトリ構造
${workspaceFolder}
    └──.vscode
        └── tasks.json
    └──src
        └── Makefile
        └── main.c
        └── .....

LinuxにてVisual Studio CodeでMakefileを使ってビルドするためには、そのtasks.jsonに設定値を記載していけばできるようになります。
以下がtasks.jsonの設定例になります。ビルド時は特に指定がなければ、Visual Studio Codeで開いた、ディレクトリ配下でmakeを実行しようとするので"cwd"のパラメータを活用してMakefileがあるディレクトリを指定する必要があります。

tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        // Use make command with Makefile
        {
            "label": "Execute make",
            "type": "shell",
            "command": "make",
            "args": [],
            // cwdにはMakefileがあるディレクトリを指定
            "options": {"cwd": "${workspaceFolder}/hoo/bar/"}, 
            "group": "build"
         },

       // Execute make clean
       {
            "label": "Execute make clean",
            "type": "shell",
            "command": "make",
            "args": ["clean"],
            // cwdにはMakefileがあるディレクトリを指定
            "options": {"cwd": "${workspaceFolder}/hoo/bar/"},
              "group": "build"
       }
    ]
}

tasks.jsonを作成したら、Visual Studio Codeのメニューで[terminal] > [Run Build Task...]を選択すると、tasks.jsonで指定したビルドタスクが実行されます。また、[terminal] > [Run Task...]を選択すると、tasks.jsonで指定したビルドタスクが選択できます。

GDBを使ったデバッグ

次に、GDBを使ったデバッグの設定を行います。Visual Studio CodeでC/C++のデバッグを行うためには、launch.jsonというファイルに設定を記載します。launch.jsonは、Visual Studio Codeで開いたディレクトリの.vscodeフォルダ配下に作成します。launch.jsonという名前のファイルを直接.vscode配下に作ってもよいですが、Visual Studio Codeのメニューで[Run] > [Add Configuration...]を選択します。そうすると、launch.jsonのテンプレートが表示されるので、それを選択して作成する方法もあります。
イメージは以下で、tasks.jsonと同じディレクトリに作成します。

ディレクトリ構造
${workspaceFolder}
    └──.vscode
        └── launch.json
        └── tasks.json
    └──src
        └── Makefile
        └── main.c
        └── .....

launch.jsonの記載については、シンプルに書くと以下のようになります。(参考[1])

launch.json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C++ Launch",
            "type": "cppdbg",
            "request": "launch",
            // Makefileでビルドしてできる、バイナリのパスを指定
            "program": "${workspaceFolder}/main",
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "MIMode": "gdb",
          }
    ]
}

launch.jsonファイルを作成したら、Visual Studio Codeのメニューで[Run] > [Start Debugging]を選択すると、launch.jsonで指定したデバッグ設定が実行されます。

まとめ

Linux用に公開されているC/C++のソースコードをVisual Studio Codeで開発する際に、Makefileを使ってビルドし、GDBを使ってデバッグする方法をまとめました。makeによるビルドとGDBによるデバッグは、コマンドラインで行うことが多いですが、Visual Studio Codeで行うことで、GUI的にデバッグがしやすくなると思いますので知っておくにこしたことはないかもしれないですね。

脚注
  1. https://code.visualstudio.com/docs/cpp/launch-json-reference ↩︎

Discussion