娘がAtCoderするのでこっそり環境設定 2021

#これは？
娘がAtCoderを始めようとしている。

父としては、娘が環境設定で嵌って「父上！」と頼ってきた時にさっとヒントを出したい（勝手に問題解決する場合はそれで良い）。

:::note
2021/10/30 時点
:::

#環境
娘が使用するPCは、私のMacである。娘のアカウントを追加して貸したら自室に設置、そのまま奪われた形である。

#下調べ
##ビルドまで
https://blog.spiralray.net/cp/devenv-cpp

https://qiita.com/tom_sapiens/items/c4c4b7de2201272a94db

https://atcoder.jp/contests/APG4b/rules?lang=ja

- C++17ってことでいいのかな

##単体テスト
https://qiita.com/denden14/items/bd1d313bf57f806bba9d

https://qiita.com/denden14/items/9594e7309167e82933e4


#実施内容
##gcc
homebrewは入ってた（娘の...いや自分のMacにも入っている）ので

```
% brew install gcc
```

インストールされたgccは11だった。ちなみに私が仕事でC++を使っていたのは20年前である。

```
% ln -s /usr/local/bin/gcc-11 /usr/local/bin/gcc
% ln -s /usr/local/bin/g++-11 /usr/local/bin/g++
```

##VSCode
- MSのC/C++拡張を入れた

###c_cpp_properties.json

- コマンドパレットで "C/C++ Edit Configurations (UI)" を選択
 - C++標準が gnu++17 になっていたのでそのままで

###tasks.json

[VSCodeのドキュメント](https://code.visualstudio.com/docs/cpp/config-clang-mac)　は clang なので、[Using C++ on Linux in VS Code](https://code.visualstudio.com/docs/cpp/config-linux)　を見ながら作成

```json:tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
      {
        "type": "shell",
        "label": "g++ build active file",
        "command": "/usr/local/bin/g++",
        "args": [
          "-std=c++17",
          "-g",
          "${file}",
          "-o",
          "${fileDirname}/../bin/a.out"
        ],
        "options": {
          "cwd": "${workspaceFolder}"
        },
        "problemMatcher": ["$gcc"],
        "group": {
          "kind": "build",
          "isDefault": true
        }
      }
    ]
}
```

- 実行ファイルができるディレクトリを変えたくらい

ビルドできた

###launch.json

こちらも[VSCodeのドキュメント](https://code.visualstudio.com/docs/cpp/config-clang-mac)の通りに

```json:launch.json
{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(lldb) 起動",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/../bin/a.out",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "preLaunchTask": "g++ build active file"
        }
    ]
}
```

-こちらも実行ファイルがある場所を変更

デバッグできた

##単体テスト
20年前はCppUnitとかだったなあ

今は、何、GoogleTestとな

###GoogleTest

[googletest/README.md](https://github.com/google/googletest/blob/master/googletest/README.md)

上の手順通りに進めるが、途中で　[CMake](https://ja.wikipedia.org/wiki/CMake)　を入れろと出てくる。

https://qiita.com/kai_kou/items/df335eb7ee78229ee46f

```
% brew install cmake
```

でよい。

あとは、GoogleTestのREADMEの通りにすれば、/usr/local/の下にインストールされるところまでは進む。

これでいいのかな、と思って

```cpp:testSample.cpp
#include <gtest/gtest.h>
#include "sample.h"

TEST(AddTest, onePlusTwoGivesThree)
{
    EXPECT_EQ(3, add(1, 2));
}
```

とやると、だめ

###c_cpp_properties.json

gtest/gtest.h のパスが通ってないと怒られるので、設定ファイルにパスを追加した。

```json:c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/local/include/**"
            ],
            "defines": [],
            "macFrameworkPath": [],
            "compilerPath": "/usr/local/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "macos-gcc-x64"
        }
    ],
    "version": 4
}
```

###tasks.json

これでIntelliSenseは警告を出さなくなったが、ビルドが通らない。
ライブラリが見えていない感じ。

https://qiita.com/denden14/items/9594e7309167e82933e4

を参考にしながら、tasks.json を修正


###cmake （再挑戦)

実際ビルドすると

> ld: warning: object file (/usr/local/lib/libgtest.a(gtest-all.cc.o)) was built for newer macOS version (11.6) than being linked (11.5)

これは、GoogleTestのmakeがうまくいっていない予感..2時間以上彷徨って、

[Macで google test をお試し利用する](https://qiita.com/seigot/items/e0a6b61eca234824bd04)

の

```
cmake -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++
```

で解決した



#まとめ
参考にしたブログ記事読んで手こずるのかな...この間typescriptの環境構築する時1週間くらいかかったしな...とビクビクしてたらとりあえず動いたので良かった。2021年すごい。

もう少しコード書いてみたら不足している設定があるかもしれない。そうしたら追記しようと思う。