C++環境構築

## 1. MinGWのインストール
[ここ](https://sourceforge.net/projects/mingw-w64/files/mingw-w64/)からダウンロード   
1. インストーラのダウンロード先をダブルクリック  
![2021-10-18-22-53-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/97861b03-a54e-a96b-906b-e35c4fe1708d.png)

2. インストール設定  
Architectureはx86_64を選択  
Threadはposixを選択  
ExceptionはSJLJを選択  
![2021-10-18-22-57-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/d308318a-163e-0fd5-5829-51008bb2d31c.png)

3. インストール先のbinを環境変数に追加  
インストール時に何も変更していなければ、以下が環境変数のPATHに追加となるはず  
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-sjlj-rt_v6-rev0\mingw64\bin

## 2. CMakeのインストール  
[ここ](https://cmake.org/download/)からダウンロード 
1. インストーラのダウンロード先をダブルクリック  
![2021-10-18-23-11-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/3e02f76a-e405-6222-b042-f85b92056480.png)

2. インストール設定  
カレントユーザーのパスを通しておく  
![2021-10-18-23-14-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/a05786cc-d74d-d575-1f03-a8f1404657a3.png)

## 3. Visual Studio Code の拡張機能をインストール
1. C/C++のインストール  
![2021-10-18-23-17-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/13202e29-be74-1651-3f09-69e46355a847.png)

2. CMakeのインストール  
![2021-10-18-23-18-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/c19cde5b-1fc4-f38f-9251-a2f9e223edd6.png)

3. CMakeToolsのインストール  
![2021-10-24-21-33-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/97767c60-38d4-a414-4cfa-077475057a29.png)


## 4. HelloWorldの作成
 1. main関数の作成  
 
 ```c
#include "stdio.h"

int main( int argc, char** argv )
{
    printf("Hello World.\n");
    return 0;
}
 ```

## 5. コマンドプロンプトでgccのインクルードパス情報を取得  
`gcc -xc++ -E -v -`をコマンドプロンプトで入力

## 6. コンフィグの設定  
1. コマンドパレットを起動して下記を選択  
![2021-10-18-23-26-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/ecfa6ca7-bbfd-0c1b-3a9a-ef9d1a42d632.png)

2. 構成の追加  
![2021-10-19-22-01-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/190fefbb-5cea-33af-642f-dec589ff56ec.png)

3. gccのパスを入力  
![2021-10-19-22-03-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/42e9feed-c72d-313c-6863-9d89df724b60.png)

4. IntelliSense モードの変更  
![2021-10-19-22-11-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/14a13551-5094-f675-90f3-f53332de2320.png)

5. パスを含めるの追加  
![2021-10-19-22-16-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/baf3580e-fe00-55fc-1020-c2cac27a6466.png)

6. アクティブファイルとデバックを実行  
![2021-10-19-22-58-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/4679eddb-0010-985e-b4ce-c32fed4e043f.png)

7. g++.exeを選択
![2021-10-19-23-00-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/a3d8d6b7-da39-fccf-dee5-b761f502e2ec.png)

## 7. CMakeを用いた環境作成例
1. サンプルファイルの追加  
![2021-10-24-21-35-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/ef43913f-ea53-3bd5-01e6-6696de761d58.png)

2. ファイルの編集  

    ``` c:main.cpp
    #include <stdio.h>
    #include "sub\calc.h"
    int main(int argc, char* argv[])
    {
        int c = add(5,4);
        printf("Hello World\n");
        printf("%d\n",c);
        return 0;
    }
    ```
    ```c:calc.cpp
    int add(int a, int b)
    {
       return a+b;
    }
    ```
3. Ctrl+Shft+PでCMake:クイックスタートを選択
![2021-10-24-21-39-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/f0eea53a-ca54-0fa9-9ede-d03c24cdfb8d.png)
4. 任意のプロジェクト名を入力  
![2021-10-24-21-41-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/972ea52f-aff0-4f55-a92e-9306df759cd9.png)
5. 単体で実行するのでExecutableを選択  
![2021-10-24-21-42-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/99202ac0-81b1-647a-8cb3-8ce8154789c8.png)
6. 作成されたcppファイルに2行追加  

    ```diff
    cmake_minimum_required(VERSION 3.0.0)
    project(test_app VERSION 0.1.0)
    include(CTest)
    enable_testing()
    add_executable(test_app main.cpp)
    + add_subdirectory(sub)
    + target_link_libraries(test_app calc)
    set(CPACK_PROJECT_NAME ${PROJECT_NAME})
    set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
    include(CPack)
    ```

7. subフォルダにCMakeLists.txtファイルを追加

``` CMake
add_library(calc calc.cpp)
```

8. Ctrl+F5でCMakeによるデバックを行う  
![2021-10-24-21-58-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/2afc0313-1e6e-c85e-0315-b211bf06cc94.png)  
![2021-10-24-21-57-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517181/6367bd19-9ec4-c877-ca14-b904f2913505.png)