ここのことはなかったことにするかもしれない

仕事がらみの記事を主として扱いますが、あくまで個人ブログです。2013年以前の記事は https://yellow-73.hatenablog.com/ にあります。

VSCodeでCygwinのgccとmakeを使う

エクステンションを入れる

拡張機能」から「C/C++」を入れて下さい。

launcher.json と task.json を作る

Cファイルを作成

まず、a.c を作り、適当なコードを書きます。

#include 

int main() {
  printf("Hello World.\n");
  return 0;
}

tasks.json の作成

a.cを開いた状態で、「実行」→「デバッグの開始」を選択します。

ウィンドウの中央上端に「環境の選択」の選択肢が現れるので「C++ (GDB/LLDB)」を選択します。

続いて、「gcc.exe - アクティブファイルのビルドとデバッグ コンパイラ C:\cygwin64\bin\gcc.exe」を選択します。

これで .\.vscode\tasks.json が作られます。

デバッグが始まると思いますが、とりあえずうまくいかないはずですが、無視して終了させます。

ここで、必ず終了させて下さい。たとえば、ウィンドウ中央上端のデバッガ用のボタン列の「□」をクリックする等します。終了させると、.\.vscode\launcher.json が生成されます。

ファイルの編集

launcer.json の編集

外部コンソールを使うよう変更

"externalConsole": false,

"externalConsole": true,

に変更します。ここを変更しないと、デバッガが動いてくれません。原因とかは、私はいっさい理解していません。

確認事項

次の2点の通りになっているか確認しておいて下さい。

"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"miDebuggerPath": "C:\\cygwin64\\bin\\gdb.exe",

いったん実行してみる

a.c の行番号より左側をクリックするとブレークポイントになるので、ブレークポイントにしたうえで「実行」→「デバッグの開始」とするか、F5キーを押すかして、デバッガで実行してみて下さい。

Makeを使う

Makefileの作成

out.exe: a.c
	$(CC) -g a.c -o $@

注意するべきは、-gオプションを付けないとブレークポイントも何も効かなくなる点です。

また、out.exeを出力しているので launch.json で変更が発生します。

tasks.json の編集

tasks.jsonに次を追加します。"task"へのエントリの追加です。なお、ラベルはtasks内で重複しないようにして下さい。

{
    "tasks": [
        {
            (すでに書かれている)
        },
       {
            "label": "My Make",
            "type": "shell",
            "command": "C:\\cygwin64\\bin\\make.exe",
            "args": [],
            "group": "build",
            "options": {
                "cwd": "${workspaceFolder}",
                "env": {
                   "PATH": "C:\\cygwin64\\bin"
                }
            }
        }
    ....

当初「"cc"が存在しない」等のエラーが出たのですが、環境変数PATHをセットすることで対応できるようになりました。

launcher.json の編集

preLaunchTaskを変更してmakeを動かすようにする

configurations/preLaunchTask を、"My Makeに変更します。

"configurations": [
    {
        ....
        // "preLaunchTask": "C/C++: gcc.exe アクティブなファイルのビルド"
        "preLaunchTask": "My Make"
    }
]

ここの "My make"は、task.json に記載したラベルです。

実行ファイルの設定を out.exe に変更する

これまでの設定ではa.cでデバッガを動かすと、a.cと同じフォルダ内のa.exeが生成される大前提でした。
makeを使う以上、Makefileの設定に合わせないといけません。

"configurations": [
    {
        ....
            // "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "program": "${workspaceFolder}\\out.exe",
        ...
    }
]

IntelliSenseの設定変更

C/C++: Edit Configurations (UI)から、IntelliSenseの設定変更を行います。

  • コンパイラパス」は選択肢になっていて、"C:/cygwin64/bin/gcc.exe"等とします。
  • 「IntelliSenseモード」も選択肢になっていて、"windows-gcc-x64"にします。

おわりに

cygwinベースの開発であっても、VSCodeからデバッガが動かすための手順を示しました。
ちょっと難しかったけれども、エディタのはずが統合開発環境っぽくできるのがすごいなと思いました(小学生なみの感想)