#これは?
娘が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 を見ながら作成
{
// 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のドキュメントの通りに
{
// 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
上の手順通りに進めるが、途中で CMake を入れろと出てくる。
% brew install cmake
でよい。
あとは、GoogleTestのREADMEの通りにすれば、/usr/local/の下にインストールされるところまでは進む。
これでいいのかな、と思って
#include <gtest/gtest.h>
#include "sample.h"
TEST(AddTest, onePlusTwoGivesThree)
{
EXPECT_EQ(3, add(1, 2));
}
とやると、だめ
###c_cpp_properties.json
gtest/gtest.h のパスが通ってないと怒られるので、設定ファイルにパスを追加した。
{
"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時間以上彷徨って、
の
cmake -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++
で解決した
#まとめ
参考にしたブログ記事読んで手こずるのかな...この間typescriptの環境構築する時1週間くらいかかったしな...とビクビクしてたらとりあえず動いたので良かった。2021年すごい。
もう少しコード書いてみたら不足している設定があるかもしれない。そうしたら追記しようと思う。