1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C++の開発環境をDockerで構築してVSCodeでリモート開発

Last updated at Posted at 2021-03-01

ことの発端

VSCode でC++の開発環境構築(Windows / MacOS) の記事を書いていて「何故にdocker使わない?」ということに気付き、やってみたら、更に簡単だったのでメモ。

Docker 未経験の方でも、Dockerさえインストールできれば1、この手順で進めれば大丈夫です。
これをキッカケに Docker って何者なのかを調べてみると良いかと思います。

手順

1. DockerFile を作成

ここで開発用のフォルダを作成し、まずは Dockerileを作成します。

Dockerfile
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y build-essential gdb cmake

今回は docker-compose は使用しません。2

2. VSCodeからコンテナ内へリモート接続する

  1. 拡張機能 Remote - Containers : ms-vscode-remote.remote-containers をインストールします。

  2. インストールすると、左下の緑色のボタンが表示されるので、クリックします。
    image.png

  3. コマンドパレットが表示されるので今回はRemote-Containers: Open Folder in Containers...を選びます。
    image.png

  4. フォルダ選択画面が表示されるので、Dockerファイルが存在するフォルダを選択します。

  5. コマンドパレットが表示されるのでFrom 'Dockerfile'を選択します。
    image.png

この手順で、コンテナビルド→設定→起動→ログインが行われます。

3. 開発用の拡張機能をインストール

  1. 拡張機能 C/C++ : ms-vscode.cpptools をインストールします。

  2. 拡張機能CMake Tools : ms-vscode.cmake-tools をインストールします。

VSCodeはリモート環境毎に拡張機能をインストールするという素晴らしい仕様なので、既にローカルで拡張機能をインストールしていても、再度インストールがされているか確認をしてください。

4. 開発開始

  1. [F1] でコマンドパレットを表示しして、Cmake: Configure を選択します。
    image.png

  2. Kit の選択が要求されるので GCC 7.5.0 を選択します。
    image.png

  3. 右下に CMakeLists.txt を作るか聞いてくるのでCreateを押下します。
    image.png

  4. プロジェクト名を入力してと言われるので、適切な名前を入力します。
    image.png

  5. 実行ファイル(Executable)からライブラリファイル(Library)かと聞かれるので、Executable を選択します。
    image.png

この手順で、CMakeLists.txtmain.cpp が生成されます。

5. ビルドとデバッグ実行

  1. [F7] でビルドが行われます。
  2. [CTRL] + [F5] でデバッグ実行が開始されます。

ブレイクポイントやら、スタックトレース、変数のウォッチなどは、一般的な開発環境と同じなので、ここでは割愛します。

その他

  • VSCode を閉じれば、コンテナは自動的に停止します。
  • 次回からは VSCode を起動して Recent からフォルダを選択すれば、自動的にコンテナを起動してくれます。
  • VSCodeでgitの操作を行いたいなら、Dockerfileにgitを追加しましょう。
  • gitを使う場合 .gitignorebuild.devcontainer を追加しましょう。
  • Remote-Container使えば、C++以外でもDockerを使って開発環境構築するのは良いかも。
  1. VT-xを使っているミドルウエア(VMWareやVirtualBoxなど)をインストールしている場合はホスト環境にDockerを入れると、ネットワークドライバがコンフリクトしてアンインストールに苦労するかもなので、注意してください。

  2. docker-compose.ymlを書いても良いのですが、MS謹製の Remote-Containers がvolumeのbindとか面倒見てくれるので今回はこの子に甘えます。外部からのネットワークかインバウンドを想定したプログラムならdocker-compose.ymlを記述する必要がありますが、ここでは割愛します。VSCodeのターミナルで起動したプロセスがTCPをリスニングした場合、自動的にポートフォワードしてくれるので特に設定不要です。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?