紙の裏のメモ

崖の上のポニョみたいなイントネーションです。坂の上の雲みたいな(ry

Visual Studio Codeを使ってC++でHello World

C++hello worldする記事はたくさんあるんですが、VSCodeをあまり使い慣れておらず手間取ったのでまとめてみます。

今回はVSCodeはインストール済みという前提で説明させていただきます。 また、ここでは挙動についての詳細な説明はせず、VSCodeでHellow Worldすることのみにフォーカスします。

対象読者は以下の人を想定しています。

  • C++を触ったことがない
  • 普段VSCodeで開発していない

下準備

まずVSCodeを使ってC++で開発しやすいように拡張機能をインストールしましょう。 まず⌘+shift+xを押してみてください。以下のようなサイドメニューが表示されると思います。これは拡張機能ビューと呼ばれるもので拡張機能をインストールできる画面になります。 Image from Gyazo

この画面にある検索フィールドにcpptoolsと入力しインストールした後にVSCodeをReloadしてください。 この拡張機能をインストールすることで自動補完や定義元へのジャンプなどが可能になるようです。

ファイル作成

次にhelloworld.cppというファイルを作成した後、以下のように記述します。

#include <iostream>

int main()
{
    std::cout << "Hello C++ World" << std::endl;
    return 0;
}

こいつをコンパイルして実行するとHello C++ Worldと表示されるはずです。 ではVSCodeでビルドしてきましょう

VSCodeでビルド

ファイルのコンパイルはターミナルでもできます。 その際には g++ ~/helloworld.cpp -o helloworld.outみたいな感じでコンパイルできます。 まあVSCodeのショートカットキーでビルド可能なのでビルドはVSCodeに任せてしまいましょう。

VSCodeからビルドを行うためにまず、tasks.jsonファイルを作成する必要があります。以下の手順に従ってファイルを作成してください。

  • ⌘+shift+Pでコマンドパレットを開く
  • Tasks: Configure Tasksを入力してEnter
  • Create tasks.json file from templatesを選択
  • 最後にOthers を選択

以上の手順が完了すると以下のようなtasks.jsonファイルが出現します。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "echo",
            "type": "shell",
            "command": "echo Hello"
        }
    ]
}

このファイルを次のように書き換えてみて下さい

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build hello world",
            "type": "shell",
            "command": "g++",
            "args": [
                "-g", "-o", "${fileDirname}/${fileBasenameNoExtension}.out", "${file}",
            ],
            "group": {
                "kind": "build",
                "isDefault": true,
            }
        },
    ]
}

重要だと思う部分だけ説明をします

command

実行するコマンドを指定します。ここではg++コマンドでコンパイルするという指定をしています。

args

実行するコマンドに渡す引数を指定しています。 "-g", "-o", "${fileDirname}/${fileBasenameNoExtension}", "${file}"と記述しており、ぱっと見た感じややこしく思うかもしれません。一つづつ説明していきます。また、関連した知識を広げるには以下のサイトが参考になるかもしれません。

-g

コンパイルの際にdebugのための情報を持ったファイルを生成します。この指定がなくてもビルドはできますが、後々プログラムを書くことを考えたら追加しておいたほうがいいでしょう。

-o

コンパイル後のファイルの名前をこちらで指定するためのオプションです。

${fileDirname}/${fileBasenameNoExtension}

コンパイル後のファイル名です。こちらはVSCodeの変数を利用していて、${コンパイル対象のファイルがあるディレクトリ}/${コンパイル対象のファイルの拡張子を取り除いたファイル名}という意味になります。 例えば、hoge/fuga.cppコンパイルしたらhoge/fugaにしますよーという指定です。

${file}

現在開いているファイル名を表す変数です。コンパイル対象のファイルがここに入るイメージです。

つまり、"-g", "-o", "${fileDirname}/${fileBasenameNoExtension}", "${file}",という指定は、現在開いているファイルをコンパイルして同じディレクトリに拡張子を取り除いたファイル名で配置しますよー。あ、デバッグのためのファイルもつけておきます。という感じでしょうか。

group

こちらはこのタスクをbuildのタスクとしますよーという意味です。 ⌘+shift+Bでビルドのタスクを走らせることができるのですが、その時にこのファイルのタスクを実行します。ということです。

このtasks.jsonを保存し、先程のhelloworld.cppを開いて⌘+shift+Bを実行すると同階層にhelloworld.outというファイルができると思います。そいつがコンパイルされたファイルになります。

実行する

後はこのファイルを実行して終了です。 コンパイルVSCodeのコマンドで行なったのですが、ファイルの実行はターミナルから行いたいと思います。 これは正直個人の趣味です。先程のtasks.jsonにファイルを実行するところまで書いてしまってもいいですが、まあデバッグのためだけにビルドしたい時もあるだろうし、いちいち実行しなくてもいいか。という感じです。 そのうち気が変わるかもしれませんが。

VSCodeでターミナルを開くにはctrl+`で開けます そこに./helloworld.outと打ち込めばめでたくHello C++ Worldと表示され、終了となります。