【C++】AtCoderローカルテスト環境構築【VSCode】
ローカルで、C++コードのコンパイル・テストができる環境を構築しました。
想定環境
Windows 11
MinGWのインストール
g++を有効にしてください。
未の場合、こちらのURLを参考に。
VSCodeのインストール
未の場合、こちらのURLからインストール。
VSCodeのシェルをbashに変更
こちらのURLを参考に、WSLを有効にし、VSCodeのターミナルをbashにしてください。
※bashにする理由
Windows PowerShellのままだと、AtCoder Libraryを使用する場合に、コンパイルエラーが大量に出ます。
参考URL:
回避する方法を試しても、コードによってはエラーが出てしまうので、bashにしてしまったほうが楽だと思います。
AtCoder Libraryを使用しない場合はお好みです。個人的には何かとbashの方が便利なので、設定推奨。
コンパイルしてみる
VSCodeのワーキングディレクトリに、hello.cpp作りましょう。
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
}
以下のコマンドを、VSCodeのターミナルに打ち込んで、コンパイルします。
※ファイルが見つからない等出る場合、フォルダやファイルの場所・名前を確認してみてください。
g++ hello.cpp -std=c++17
以下のコマンドで、コンパイルしたファイルを実行します。
./a.out
「Hello, World!」が表示されたら成功です。
標準入力を読み込んで実行
in.txtを作りましょう。
GoodBye
hello.cppを以下のように書き換えます。
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
cout << s << ", World!" << endl;
}
以下のコマンドを、VSCodeのターミナルに打ち込んで、コンパイルします。
g++ hello.cpp -std=c++17
以下のコマンドで、コンパイルしたファイルを実行します。
< ./in.txtのようにすることで、in.txtを標準入力として受け取れます。
./a.out < ./in.txt
「GoodBye, World!」が表示されたら成功です。
in.txtを書き換えれば、他の標準入力も試せます。
例えば、in.txtを「Hello」に書き換えて保存したら、再度./a.out < ./in.txt
を実行してみてください。「Hello, World!」が表示されます。
今後、ローカルでテストする際は、
- C++のコードを書く
-
g++ ファイル名 -std=c++17
でコンパイル - in.txtに標準入力を書き込む
-
./a.out < ./in.txt
でテスト実行
のように行えます。
コンパイル・実行は、ファイル保存後に行ってください。最後に保存した状態でコンパイル・実行されます。
カスタマイズ
ここからはオプションなので、気に入ったものがあれば導入してみてください。
後述しますが、最終的に私のコンパイルコマンドは以下のようにしました。
g++ $F.cpp -std=c++17 -o out.out -I /mnt/c/Users/rare/git/training-atcoder/ac-library
また、エイリアス設定で簡易に実行できるようにもしています。
実行ファイル名を指定してコンパイル
ファイル名がa.outだと、並び順が気に食わなかったので、指定します。
-o
オプションを使用してください。
g++ hello.cpp -std=c++17 -o out.out
out.outはセンス無いと思うので、test.exeなどがいいですね多分。お好みで。
テスト実行する際は、./out.out < ./in.txt
のように、a.outの箇所を変えるだけです。
コンパイル対象ファイルを変数化
例えば、hello.cppをコンパイルする場合、こうします。
F=hello #ファイル名を変数Fに代入
g++ $F.cpp -std=c++17
ACLを含んでコンパイル
ACLを使用する場合、-I
オプションでatcoderフォルダのパスを指定します。
ACLドキュメントにも記載あります。
ドキュメントより、atcoderフォルダをmain.cppと同じ場所に置いてコンパイルする場合、
g++ main.cpp -std=c++17 -I .
で良いですが、毎回atcoderフォルダをコピーするのは不便なので、
相対パスか絶対パスで指定することをお勧めします。
絶対パスについて、
WSLでは通常とパスが違います。(C:\~ではなく、/mnt/c/~となっているはず)
VSCodeのターミナルでac-libraryフォルダに行き、pwdすればパスがわかると思います。
以下は私の例です。
g++ main.cpp -std=c++17 -I /mnt/c/Users/rare/git/training-atcoder/ac-library
エイリアスの設定
Linuxのエイリアスって便利ですよね。
WSLでも設定できます。
VSCodeのターミナルで構わないので、.bashrcを編集しましょう。
vi ~/.bashrc
設定したいエイリアスを末尾とかに追記します。
私の場合、コンパイルコマンドはacc
、実行コマンドはact
に設定しています。
(atcoder compile, atcoder testの意味)
以下は私の例です。ここまで紹介したものを詰め込んでいます。
# g++ alias
alias acc='g++ $F.cpp -std=c++17 -o out.out -I /mnt/c/Users/rare/git/training-atcoder/ac-library'
alias act='./out.out < ./in.txt'
設定後は読み込み直しておきましょう。
source ~/.bashrc
オールカスタマイズ後のテスト手順
- C++のコードを書く
-
F=ファイル名
で変数Fに代入 -
acc
でコンパイル - in.txtに標準入力を書き込む
-
act
でテスト実行
Discussion