3
0

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.

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

Last updated at Posted at 2021-10-30

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

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

2021/10/30 時点

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

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

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

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

#実施内容
##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のドキュメント は clang なので、Using C++ on Linux in VS Code を見ながら作成

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のドキュメントの通りに

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

上の手順通りに進めるが、途中で CMake を入れろと出てくる。

% brew install cmake

でよい。

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

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

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 のパスが通ってないと怒られるので、設定ファイルにパスを追加した。

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は警告を出さなくなったが、ビルドが通らない。
ライブラリが見えていない感じ。

を参考にしながら、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 をお試し利用する

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

で解決した

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

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

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?