競技プログラミングのためのVSCode環境構築【Mac OS X Catalina】


長い間放置していたMacBook Proで、競技プログラミングをVSCodeでするための環境構築を行いました。
途中で困ったことなどをメモしていきます。

VSCodeのインストール

VSCode 公式からダウンロードしてきます。
VSCodeを開いたら、C/C++用のプラグインをインストールします。(コンパイラではありません。)

この写真と一致するものを見つけ、インストールしましょう。
また、同じように次の二つもインストールすると良いです。

コンパイラのインストール

Macにはもともと(自分のことをGCCだと思っている精神異常)clangがインストールされていますが、GCCを使いたい場合も多いと思います。(これは完全に個人的な感覚ですが、複雑なプログラムになればなるほどGCCの方が優秀です。)
まずは、HomeBrewをインストールします。

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

そして、brew を使って gcc をインストールします。

% brew install gcc

ここでインストールされる gcc は、gcc-9 という名前なので、シンボリックリンクを作って gcc や g++ で実行できるようにします。

% ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc
% ln -s /usr/local/bin/g++-9 /usr/local/bin/g++

ここでインストールされた gcc は、 /usr/local/bin にあります。これに対し、もともとインストールされている gcc は /usr/bin にあるので、環境変数の順番がデフォルトのままであれば、brew でインストールした gcc/g++ が使えます。
一応、 which コマンドで確認しておいてください。

% which gcc
/usr/local/bin/gcc
% which g++
/usr/local/bin/g++

これで、 gcc のインストールは完了です。

デバッガのインストール

macOS Catalina では、gdbが使えません。
仕方ないのでlldbを入れたいんですが、僕はすでにXCodeを一度インストールしており、その時についてきたか何かでもともと入っていたのでうまくいくかわかりません。

すでに入っている人も多そうですから、

which lldb

で存在を確認して、なかったら

% brew install llvm --with-lldb

でできると思いますが、できなかったらごめんなさい。

VSCodeの設定

VSCodeの設定をします。
基本的には、デバッグありの実行となしの実行ができるようにします。

tasks.json の設定

まずは、Command+Shift+P でコマンドパレットを開き、Tasks: Configure Task を探します。
適当に進めると、ワーキングディレクトリ直下に .vscode が生成され、その中に tasks.json が生成されるはずです。
この tasks.json を、たとえば以下のように設定します。

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "C/C++: g++ debug build",
            "command": "/usr/local/bin/g++",
            "args": [
                "-O0",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "/usr/local/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

ビルドコマンドを usr/local/bin/g++ にするのを忘れないようにしましょう。
また、最適化を防ぐために -O0 オプションをつけておきましょう。(-Og も試しましたが、一部最適化されてしまう変数がありました)

launch.json の設定

Command+Shift+D でデバッグメニューを開くと、次のような画面が表示されます。(実際は、デバッグ構成がない旨表示されるはずです。)

ここの歯車マークをクリックすると、launch.json が生成されます。
ここではデバッグに関する設定を行います。
次のように、先ほど設定したビルドタスクを行ってからデバッガを起動するようにするとよいです。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(lldb) Launch",
            "type": "lldb",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "cwd": "${workspaceFolder}",
            "preLaunchTask": "C/C++: g++ debug build"
        }
    ]
}

これで、F5ボタンでデバッグが開始できるようになります。
lldb の、CLI/GUIのデバッガが使えます。

これでデバッガを使ったデバッグができるようになりました。
デバッグなしの実行には、CodeRunner によって追加された、右上にある実行ボタンを押しましょう。

おわりに

オンサイトコンテストなどにPCを持っていくには、持ち運びやすくて高性能なMacBookは最適だと思います。
Macでも競プロを楽しみましょう!(?)