【VS Code】CMake+GCCを使ってC/C++の開発を行う

2024-05-14C++,CMake,C言語,Visual Studio Code

はじめに

Visual Studio Code上でC/C++で開発する機会も多いです。ただある程度の規模となって複数のソースファイルに分かれるようになると、コンパイルが面倒になってきます。そのときに便利なのがCMakeで、複数のソースファイルからなるプログラムのビルドをmakeよりもわかりやすく行うことができます。

今回は、VS Code上でCMakeを使ってC/C++の開発を行う際のやり方をまとめてみました。コンパイラとしてGCCを使っています。

更新履歴

  • 2024.05.09 初版
  • 2024.05.14 アクティビティバーにCMake Toolsのアイコンを表示する方法を追記

使用した環境

  • Windows 10
  • Visual Studio Code 1.89.0
  • GCC(MinGW版) 13.2.0
  • CMake 3.27.7

Visual Studio Code拡張機能

次のVS Code用拡張機能を使いました。

  • CMake Tools v1.17.17
  • CMake Language Support v0.0.9
  • C/C++ v1.20.5

(CMake ToolsとC/C++はC/C++ Extension Packをインストールするとまとめてインストールされます)

ワークスペースの準備

CMakeを使って開発を行う場合は、新たにワークスペースを作ったほうがやりやすいです。

新しいウィンドウを開きます

新しいウィンドウ

ワークスペースにフォルダを追加します。(今回はcmake_testとします)

ワークスペースへの追加

今回は以下のようなファイルを用意します。

ファイル一覧

各ファイルの実際のコードです。

#include <iostream>

#include "sub.h"

int main(int argc, char * argv[])
{
    sub_test();

    return 0;
}
#ifndef SUB_H
#define SUB_H

void sub_test();

#endif
#include "sub.h"

#include <iostream>

void sub_test()
{
    std::cout << "Hello, world!" << std::endl;
}
cmake_minimum_required(VERSION 3.8)
project(main CXX)

add_executable(main main.cpp sub.cpp)

CMakeLists.txtの書き方については、以下のエントリも参考にしてください。



キットの選択とアクティビティバー

キットの選択

プログラムをビルドする前に必要なコンパイラを選択します。CMakeの構成が必要です。Ctrl+Shift+Pを押してコマンドパレットを開き、「CMake: 構成」を選択します。

CMake: 構成

選択可能なキットの一覧が表示されるので、必要なコンパイラを選択します。(見つからなければ、「キットのスキャン」を実施してください。事前にコンパイラへのパスは通しておくこと)

キットの選択

いろいろと出ていますが(私の環境です。なぜか古いものも残っています・・・)、この中から「GCC 13.2.0 i686-w64-mingw32」を選択します。

このようにすることで、アクティビティバーにCMakeのアイコンが表示されます。

(参考)アクティビティバーにアイコンが表示されるのはCMake Tools v1.16以降になります。
Visual Studio Code CMake Tools Extension 1.16 Update: New CMake Tools Sidebar and CMake Debugging options

アクティビティバー

VS CodeのアクティビティバーからCMakeを選択します。いろいろな設定が簡単にできるようになっています。

CMakeのアクティビティバー

ビルド

プログラムをビルドするには、CMakeのビルドにマウスカーソルを合わせ、右側に表示されたビルドのアイコンを押します。

ビルド

これでビルドされ、cmake_test/buildmain.exeが作成されます。

デバッグ

プログラムがビルドされたら、デバッグを行いますが、注意点が必要です。通常は「実行」メニューの中にある「デバッグの開始」を選択しますが、複数のソースファイルで構成されている場合は、これではうまくいきません。

「実行」メニューのデバッグ項目

うまくいかないのは、デバッグの前にアクティブファイル(今開いているファイル)のみでビルドしようとするためです。今回は複数のソースファイルから構成されているので、ファイルが足りずにビルドに失敗します。

ビルドと同時にデバッグ

ビルドと同時にデバッグを行う場合には、CMakeのデバッグにマウスカーソルを合わせ、右側に表示されたデバッグのアイコンを押します。

デバッグ

初回にデバッガとして何を使うか聞いてきます。今回はGCCでコンパイルしているため、「C++(GDB/LLDB)」を選択します。

デバッガの選択

ソースファイル側で、ブレークポイントを設定していると、そこでプログラムの実行が一時停止されます。

ブレークポイントで一時停止

デバッグのみの実行

デバッグのたびに毎回ビルドが実行されるのを避けたい場合もあります。そのような場合には、launch.jsonを作成することで対応できます。VS Code自体がひな型を作ってくれるので、変更箇所は少しだけで済みます。

launch.jsonの準備

まずは空のlaunch.jsonを生成します。デバッグモードにして、「launch.jsonファイルを作成します。」と書かれた部分をクリックします。

デバッグモード初期画面

launch.jsonをどこに作成するか聞いてきます。ルートフォルダ(cmake_test)を選択します。

launch.jsonの作成場所

すると、cmake_test/.vscode/launch.jsonが作成されます。このファイルを開きます。エディタの右下に「構成の追加」というボタンが出てくるので、これを押します。

空のlaunch.json

「{} C/C++: (gdb) 起動」を選択します。

構成の選択

選択すると、ひな型が挿入されます。下図の赤線部分を変更します。

ひな型

今回は、実行ファイル名が決まっているため、以下のようにしました。また、gdbへのパスは設定してあるため、パスは指定しません。

実際の設定

上書き保存すると、デバッグモードの一番上に今作成した設定が表示されます。左側の緑の三角を押すと、デバッガが立ち上がります。

設定後のデバッグモード

リリース版のビルド

リリース版をビルドするには、CMakeの構成からバリアントを選択し、表示された鉛筆のアイコンを押します。

バリアントの選択

これを選ぶとバリアントの一覧が出てくるので、「Release」を選択します。

バリアント一覧

これでビルドすると、リリース版が作成されます。

C++,CMake,VSCode

Posted by izadori