戻る

WSLのg++をアップデートする

競技プログラミングをやっているときにstd::map::containsを使おうとしたらVScodeにそんなものはないと怒られた。
そんな訳ないので調べてみると、まずstd::map::containsはC++20から追加された機能であり、あまりにも環境構築が適当すぎてローカルのC++の環境がC++17であることが判明。
というわけで手元でもC++20を使えるようにしました。

やったこと

環境:Ubuntu20.04.6(WSL)
まず以下のコマンドを叩く。

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install -y g++-13

この後

g++-13 --version

を叩いてバージョンが表示されたらインストールはOK。
ただしこのままだと手元にg++13が入っただけでデフォルトで使われるg++が変わらない。
そこでまず以下のコマンドをそれぞれ叩いてg++の場所を確認する。

which g++   
which g++-13

そして

sudo update-alternatives --install (g++の場所) g++ (g++-13の場所) 13

とするとデフォルトで使われるg++がG++-13になる。

g++ --version

を叩いてg++ (Ubuntu 13.1.0-8ubuntu1~20.04.2) 13.1.0...とか出たらうまくいっている。
さらにRemoteWSLでVScodeを起動してCtrl + Shift + Pで「C/C++:構成の編集」を選択し、compilerPathcppStandardの項目を

"compilerPath": (g++-13の場所),
"cppStandard": "c++20",

と変更。
これでC++20からの機能をVScode上で書いても警告が出なくなる。
最後にg++でコンパイルするときにデフォルトでC++20が使われるようにする(いちいちg++ -std=c++20 hoge.cppと書くのは面倒くさい)。
まずUbuntu上で

nano ~/.bashrc

などとして.bashrcを編集する(viでも問題ない)。
.bashrcの末尾に

alias g++='g++ -std=c++20'

と追記して保存。
コマンドライン上で

source ~/.bashrc

を叩けばOK。
これでg++でコンパイルするときにデフォルトでC++20でコンパイルされる。
上手くいかない場合はいったんUbuntuを再起動すれば大丈夫なはず

というわけで(今更過ぎるけど)無事にC++20が手元でも使えるようになりました。
なんかヤバいバージョン運用をしている気がするんですがC++は現状競プロでしか使ってないしとりあえずこれでいいでしょう。

© 2024    •  Powered by Soopr   •  Theme  Moonwalk