【C++】Visual Studio Code で MinGW を使って C++ の boost をコンパイルする

・Visual Studio を無料で使える人数を超えてしまう
・エンタープライズ企業に当てはまる

などの理由で、会社や派遣先のクライアントが Visual Studio Professional のライセンスを用意してくれない場合に Visual Studio Code を使うことになります。
C# はわりと良い子なのですが、C++ のセットアップはすこぶる面倒です。
ググっても英語サイトや古い情報、不十分な情報の断片ばかりヒットするので、Cygwin や Linux 環境でコンパイルした経験がない人にはハードルが高いと思います。
個人利用とか、特にこだわりがないなら Visual Studio を使った方が断然良いです。

Visual Studio Code で C++ の boost が使えるようになるまで、2時間くらい格闘したので、セットアップ手順を書きます。

Extensions から C/C++ をインストール

インストールするのは microsoft.com のやつです。
これにはコンパイラとデバッガが含まれていません。
コンパイラとデバッガを別途用意することで、Visual Studio Code 上でのデバッグ(ブレークポイント設定、ステップ実行、変数の値表示など)が利用できるようになります。

MinGW をインストール

MinGW は Windows 環境で C と C++ 用の各種コンパイラ(clang/c++/gcc/g++など)、デバッガ、各種コンパイラ用の boost などを使えるようにするアプリです。
まず、MinGW をインストールします。

ダウンロードリンク
https://github.com/msys2/msys2-installer/releases/download/2022-06-03/msys2-x86_64-20220603.exe

exe ファイルを実行してインストーラーを起動し、適当な場所にインストール。
私は C ドライブ直下にインストールしましたが、その場合、C:\msys64 というフォルダができます。

C:\msys64\mingw64.exe を実行すると、MinGW のターミナルが開きます。

MinGW からコンパイラとデバッガをインストール

ターミナルに以下のコマンドを入力
pacman -S base-devel mingw-w64-x86_64-toolchain

Proceed with installation? [Y/n] と聞かれたら y を入力してエンター

これでコンパイラとデバッガ(gdb)の両方が C:\msys64\mingw64\bin 直下にインストールされます。

boost をインストールするには以下のコマンドを MinGW のターミナルに入力
pacman -S mingw-w64-i686-boost mingw-w64-x86_64-boost

Proceed with installation? [Y/n] と聞かれたら y を入力してエンター

boost のヘッダファイルは C:\msys64\mingw64\include\boost 直下にインストールされます。

環境変数を編集

MinGW 側でやることはもうないので、ターミナルを閉じても問題ないです。
Windows 側で環境変数を設定します。

環境変数を編集したら、MinGW のターミナル、コマンドプロンプト、Visual Studio Code を開いている場合は閉じる。
PC再起動は不要ですが、古いウィンドウズを使っている場合は必要かも知れません。

コンパイラとデバッガとboostを使ってみる

適当な場所にフォルダを新規作成
コマンドプロンプト(Power Shell のターミナルでもOK)を開いて、↑のフォルダに移動
コマンドプロンプトに code . を入力して Visual Studio Code を開く


NEW FILE を選択して main.cpp を追加

コードを入力

#include <iostream>
#include <boost/shared_ptr.hpp>

using namespace std;
using int_ptr = boost::shared_ptr<int>;

int main()
{
    int_ptr hoge { new int(999) };
    if (hoge)
    {
        cout << "hello world " << *hoge << endl;
    }
    return 0;
}

インテリセンスがケチをつけてくるので黙らせる
赤い波線をクリックして、Quick Fix.. を選択

インテリセンスは boost のインクルードパスを知らない状態なので、「こんなヘッダファイル知らんぞ!」と警告を出してくれています。
余計なお世話なので、この警告を無効にします。
インテリセンスに boost のインクルードパスを教えることはできるようですが、すごく面倒なので黙らせる方が手っ取り早いです。

Disable error squiggles を選択

インテリセンスは無視で構いませんが、コンパイラに boost のインクルードパスを伝えないとコンパイルが通りません。
そのための設定を行います。

メニューの Terminal にある Configure Tasks… を選択

select a task to configure と書かれたプルダウンリストが表示されるので、

C/C++ : g++.exe build active file
compiler: C:\msys64\mingw64\bin\g++.exe

を選択(今回は g++ を使うので)。

tasks.json が新規作成され、Visual Studio のエディタに表示されます。
“args” に並んでいる値は、g++ のコンパイルオプションです。
インクルードパスを追加するオプションは -Iインクルードパス なので、↓の画像のように記載します。
Ctrl + S で上書き保存。

main.cpp に戻って、適当な行にブレークポイントを設定し、Shift + Ctrl + B でビルドを行う。
ここまでの手順に間違いがなければ、ターミナルに Build finished successfully と表示される。

メニューの Run から Start Debugging を選択

select debugger と表示されたら、C++(GDB/LLDB) を選択

ステップ実行できたり、変数の値を確認できる

下ペインのタブを TERMINAL に切り替え、cout されたか確認。
正常に動作していれば、hello world 999 と表示されている。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です