Contents
概要
AtCoder用のC++開発環境をMac上に構築します。
(2020/4/5更新:C++17環境に更新しました)
OS | Mac OS X Catalina |
IDE | Visual Studio Code |
コンパイラ | (デバッグ時) : Clang++ (Apple clang) (テストケース実行・提出時) : G++ |
デバッグ環境をGCCで環境構築しようとするとGDB周りで泥沼にはまったので、Clangでの環境構築となります。
(VSCode上にGDBでいい感じにデバッグ環境を構築できた方、やり方教えて下さい)
このページで記述している内容で環境構築を行うことにより、以下の事ができるようになります。
- VSCode上でのデバッグ(STLのコンテナの値がちゃんと見れる!)
- AtCoder問題ページに記載されているテストケースによる動作確認
- VSCodeのコマンドラインからのコードの提出
手順
事前準備
- App StoreからXcodeをインストール
- Homebrewをインストール
- Visual Studio Codeをインストール
GCCのインストール
Homebrewを使ってGCCをインストールします。
シンボリックリンクを貼らないと、g++のフリをした Apple clangが呼ばれてしまうので注意しましょう。
brew install gcc ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc ln -s /usr/local/bin/g++-9 /usr/local/bin/g++ # 端末を再起動し、GCCが呼ばれているか確認 g++ -v
atcoder-cli
コマンドラインからテストケースのダウンロードやコードの提出ができるようになります。
インストール
下記ページに従ってonline-judge-tools及びatcoder-cliをインストールします。
brew install python3 brew install nvm mkdir ~/.nvm echo 'export NVM_DIR="$HOME/.nvm" [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" # This loads nvm [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion' >> ~/.zshrc nvm install node npm install -g npm npm install -g atcoder-cli pip3 install online-judge-tools acc -v oj --version acc check-oj
初期設定
acc login # ここでユーザー名とパスワードを入力 # ログインできているか確認 acc session # 新たなコンテスト用ディレクトリ作成時、全問題のディレクトリを一括作成 acc config default-task-choice all # 設定ファイルのディレクトリに移動 cd `acc config-dir` mkdir cpp echo '{ "task":{ "program": ["main.cpp"], "submit": "main.cpp" } }' > cpp/template.json touch cpp/main.cpp # templateにcppが表示されるか確認 acc templates # デフォルトのテンプレートとしてcppを使用 acc config default-template cpp
各コマンドの内容は下記サイトにて確認してください。
Visual Studio Code
プラグインのインストール
必須
- CodeLLDB … LLDBを使ってデバッグしたときにSTLコンテナ内を見れるようになります。
(任意)
- C/C++ … 補完がいい感じに働いてくれます。
- Code Runner … 動作確認に使用します(ビルド&実行を行います)
各種設定
settings.json
{ "code-runner.executorMap": { "cpp": "cd $dir && rm $dir/$fileNameWithoutExt && clang++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir/$fileNameWithoutExt", }, "code-runner.clearPreviousOutput": true, "code-runner.runInTerminal": true, "code-runner.saveFileBeforeRun": true, "lldb.launch.expressions": "native", }
tasks.json
以下の設定を追加します。
- clang++でのビルドの設定
- (ついでにG++でのビルドの設定)
- テストケースの実行
- コードの提出
{ "version": "2.0.0", "tasks": [ { "type": "shell", "label": "g++ build active file", "command": "/usr/local/bin/g++", "args": [ "-std=gnu++17", "-g", "-Wall", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "/usr/local/bin" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true } }, { "type": "shell", "label": "clang++ build active file", "command": "clang++", "args": [ "-std=c++17", "-stdlib=libc++", "-x", "c++", "-Wall", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "--debug" ], "group": "build" }, { "label": "CheckTestCase", "type": "shell", "command": "cd ${fileDirname} && rm -f ${fileDirname}/${fileBasenameNoExtension} && g++ -std=gnu++17 ${fileBasename} -o ${fileBasenameNoExtension} && oj test -c \"${fileDirname}/${fileBasenameNoExtension}\" -d ${fileDirname}/tests/", "presentation": { "reveal": "always", "focus": true, "panel": "shared", } }, { "label": "SubmitCode", "type": "shell", "command": "cd ${fileDirname} && acc s ${fileBasename}", "presentation": { "reveal": "always", "focus": true, "panel": "shared", } }, ] }
AtCoder Libraryを使用する場合はSubmitCodeの部分を以下のように設定します。
{ "label": "SubmitCode", "type": "shell", "command": "cd ${fileDirname} && acc submit ${fileBasename} -- -l 4101", "presentation": { "reveal": "always", "focus": true, "panel": "shared", } },
launch.json
LLDBでのデバッグ設定を追加します。
{ "version": "0.2.0", "configurations": [ { "name": "(LLDB) Debug", "type": "lldb", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "cwd": "${fileDirname}/", "preLaunchTask": "clang++ build active file", } ] }
keybindings.json
「Ctrl + Shift + P」から「>Preferences: Open Keyboard Shortcuts (JSON)」を選択し、下記内容を追加します。
[ { "key": "ctrl+t", "command": "workbench.action.tasks.runTask", "when": "editorTextFocus", "args": "CheckTestCase" }, { "key": "ctrl+s", "command": "workbench.action.tasks.runTask", "when": "editorTextFocus", "args": "SubmitCode" } ]
これにより、main.cppを開いているときに各ショートカットによってテストケースの実行、コードの提出が可能となります。
bits/stdc++.h
clang++でもbits/stdc++.hを使えるようにしたいですよね。下記ページの内容を参考にXCodeのincludeフォルダにstdc++.hを追加します。
cd /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 sudo mkdir bits cd bits sudo wget https://gist.githubusercontent.com/reza-ryte-club/97c39f35dab0c45a5d924dd9e50c445f/raw/47ecad34033f986b0972cdbf4636e22f838a1313/stdc++.h stdc++.h
使い方
- TERMINALでacc new (コンテスト名)で対象コンテスト用の作業ディレクトリが作成されます。
- A問題のmain.cppを開き、コードを書きます。
- main.cppがアクティブのタブとなっている状態で、ctrl+tを押すことでテストケースを実行できます。
- すべてのテストケースをpassしたら、ctrl+sでコードを提出します。
- 困ったらF5でデバッグ開始。