C++環境を構築してみる(Windows10 + VSCode)

普段はRust使っていますが、C++環境もないと何かと不便なのでVSCodedで構築してみました。
参考資料の内容をGoogle翻訳してなぞってるだけなので、この記事読むより参考資料の方を読んだ方が良いです。

##参考資料
[Configure VS Code for Microsoft C++](https://code.visualstudio.com/docs/cpp/config-msvc)

##インストールしたもの
 - Visual Studio Build Tool2019
 - Visual Studio Code
   - C/C++


##Visual Studio Build Tools のインストール
URL: https://visualstudio.microsoft.com/ja/visual-cpp-build-tools/

 1. 「Build Tool のダウンロード」をクリックしインストーラをダウンロードして実行。
 1. 「C++ によるディスクトップ開発」にチェックを入れて「インストール」をクリックする。
![vs_buildtools.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/3c5e4490-663b-ea50-06a7-839fed3969fa.png)


##Visual Studio Build Tools のインストール確認
1. タスクバーの検索に「developer」と入力し始めると、候補リストに「Developer Command Prompt for VS 2019」が表示される。
![c++ 02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/28a004c1-b89f-31a4-9618-3efc99d9f418.png)

1. 「Developer Command Prompt for VS 2019」をクリックすると、cmdが起動するのでコマンドプロンプトから「cl.exe」と入力する。
![c++ 03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/43340477-893c-77a1-5907-946ea70a5503.png)

1. 「使い方：cl ...」と表示されていれば問題なし。

##VSCode のインストールとパッケージの追加
URL: https://code.visualstudio.com/download

1. 「Windows」をクリックしインストーラをダウンロードして実行。
1. 「使用許諾契約書の同意」で「同意する」を選択、「追加タスクの選択」で「エクスプローラーのファイルコンテキストメニューに[Code で開く]アクションを追加する」,「エクスプローラーのディレクトリコンテキストメニューに[Code で開く]アクションを追加する」にチェックを入れる以外は、そのままの設定で「次へ」をクリックし、最後に「インストール」をクリックする。
![VSCodeUserSetup_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/4767bab4-cc7e-ec65-9bcb-72823dc95b05.png)

1. VSCodeを起動し、アクティビティバーの「拡張機能(Ctrl+Shift+X)」から、「C/C++」を追加する。
![c++ 04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/d16e7f3f-7ef2-5510-8f86-d86c35c57596.png)


##コンパイルしてみる

1. 適当なフォルダーを作成、VSCodeで開いた後「helloworld.cpp」を作成する。
![c++ 05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/9590048f-3974-9516-df7a-ce7c6587cf83.png)

	```c++:C++
	#include <iostream>
	#include <vector>
	#include <string>

	using namespace std;

	int main()
	{
	  vector<string> msg{"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

	  for (const string &word : msg)
	  {
	    cout << word << " ";
	  }
	  cout << endl;
	}
	```

1. 「Ctrl+Shift+P」を押し、「C/C++:構成の編集」をクリックする。
![c++ 06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/131930f9-7c65-73db-7a30-eb8c0b3c2284.png)

1. VSCodeで開いたフォルダの下に、「.vscode\c_cpp_properties.json」が作成される。
![c++ 07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/7ed619ed-f601-c863-c491-656fe108c3d7.png)

1. 次に、「helloworld.cpp」を選択した状態で、「Ctrl+Shift+P」を押し、「タスク:タスクの構成」>「C/C++:cl.exe アクティブなファイルのビルド」を選択する。
![c++ 08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/ccf7b687-3ab3-d29c-def7-9809969d61f8.png)
![c++ 09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/00c30a05-37c3-cee2-fff8-c1a2b3f72c17.png)

1. VSCodeで開いたフォルダの下に、「.vscode\task.json」が作成されるので、以下の内容に修正する。


	```Json:Json
	{
	  "version": "2.0.0",
	  "windows": {
	    "options": {
	      "shell": {
	        "executable": "cmd.exe",
	        "args": [
	          "/C",
	          "\"C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/Common7/Tools/VsDevCmd.bat\"",
	          "&&"
	        ]
	      }
	    }
	  },
	  "tasks": [
	    {
	      "type": "shell",
	      "label": "MS C/C++: cl.exe アクティブなファイルのビルド",
	      "command": "cl.exe",
	      "args": [
	        "/Zi",
	        "/EHsc",
	        "/nologo",
	        "/Fe:",
	        "${fileDirname}\\${fileBasenameNoExtension}.exe",
	        "${file}"
	      ],
	      "options": {
	        "cwd": "${fileDirname}"
	      },
	      "problemMatcher": [
	        "$msCompile"
	      ],
	      "group": "build",
	      "detail": "コンパイラ: cl.exe"
	    }
	  ]
	}
	```

1. 「helloworld.cpp」を選択した状態で、「Ctrl+Shift+B」を押し「MS C/C++: cl.exe アクティブなファイルのビルド」を選択する。
![c++ 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/1b2b7ad3-ffb0-488b-e787-f5fe2224f6a9.png)

1. ターミナルに実行結果が表示され「helloworld.exe」が作成される。
![c++ 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/82e9845d-eb5f-9d20-8d75-34017c012251.png)

##デバッグしてみる

1. 「helloworld.cpp」を選択した状態で、「F5」を押し「C++: (Windows)」>「cl.exe - アクティブファイルのビルドとデバッグ」を選択する。
![c++ 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/3c02da11-0c6b-0ba5-24ca-fc2920e0f311.png)
![c++ 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/b96e8983-7771-5c8c-81d7-34e71182340e.png)

1. VSCodeで開いたフォルダの下に、「.vscode\launch.json」が作成されるので、「preLaunchTask:」を「.vscode\task.json」の「"tasks":」内の「"label":」の名前と同じにする。
![c++ 14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/2d73975c-0648-a5f5-3ede-a747dac4a94e.png)

1.ブレイクポイントを設定し「F5」を押す。 
![c++ 15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/34680e9e-c231-144a-8b91-59bafd2615d0.png)
![c++ 16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128087/78ed337e-9459-3ab0-0afc-f4bf9216aff6.png)

##まとめ

VSCodeでのC++環境の構築は初めてでしたが、「C/C++ for Visual Studio Code」のドキュメントがしっかりしているので難なく構築できました。そのうちclang環境の構築もやろうかと思います。