[備忘録]VSCodeでのC++開発環境の初期設定

 長い夏休みなのでVSTでも自作してみようかと思い立ち、JUCEを使用すべくC++の開発環境をVSCodeで整えることにした。コンパイラの設定で諸々躓いたので自分用に記録しておく。

[筆者の環境]
VSCode: ver.1.69.2
OS:macOS Mojave ver.10.14.6

1. VSCodeの拡張機能をインストール

以上二つをインストール。1つ目はデバッグや自動補完などの機能を一括してサポートしてくれる。2つ目はワンタッチでコンパイルしてくれる拡張機能。

2. includeパスの設定

プロジェクトファイルと同じ階層に生成される、.vscode/c_cpp_properties.jsonというjsonファイルに記述する。
「Ctrl+Shift+P」でコマンドパレットを開き、「C/Cpp: Edit Confguration」を選択。
 このファイル内の、"includePath"に追加したい階層を記述する。筆者の場合はclangでコンパイルをしたいため、同時にcompilerPathもclang++の物に変更しておく。

3. コンパイラの設定

 Code Runnerの初期設定ではgccのコンパイルになっている模様。筆者はclangでもコンパイルをしたいために設定を追加した。setting.jsonから「code-runner.executorMap」の項目を編集する。このうちのcppの部分を以下のように変更。なお「-std=c++11」を記述することで、C++11以降のコマンドをコンパイルできるようになるらしい。

"cpp": "cd $dir && clang++ -std=c++11 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"

[追記]
clang++ $fileNameだとソースファイルが複数になったとき、リンカで以下のエラーが起きる。

clang: error: linker command failed with exit code 1

これはCode Runnerの設定でmain.cppファイルしかコンパイルしていないために、ビルドの段階でエラーが起きることが原因。setting.jsonの「code-runner.executorMap」を以下のようにして、ディレクトリ内全てのソースファイルをコンパイルすることで解決した。

"cpp": "cd $dir && clang++ -std=c++11 *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt"

4.デバッグの設定

「Ctrl+Shift+P」でコマンドパレットを開き、「Tasks: Configure Task」を選択。「tasks.json」を開く。このファイルではcppファイルをビルドするための設定を行う。コンパイラはclang を使用するので、「"command": "clang++のパス"」に設定。C++11以降の機能も使いたいので、「"args":」に「"-std=c++11"」を追加。「"label"」もclang++でのビルドとわかるようにしておく。全文は以下の通り。

 これでタスクの設定ができたので次は、デバッグの構成の設定。「実行とデバッグ」から構成の追加を選択。「launch.json」に設定を記述する。clangでのビルド用には「"preLaunchTask"」に先ほどの「tasks.json」で設定した「"label"」の物に変更する。

同様の手順でgcc環境でのデバッグ、実行もできるようにタスクとデバッグ構成の設定を行った。


[追記]

 clangはどうやらbrew経由で入れないと最新版が使えないらしい。Xcodeをインストールすると付いてくるとのことで、筆者の場合それを使用していたのだが、バージョン管理がめんどそうなのでbrewから再度入れなおすことにした。

[さらに追記]
 デバッグの設定で、${file}としておくと現在のソースファイルしかコンパイルされない。ソースファイルが複数の場合はリンクの段階でビルドエラーとなるが、Code Runnerでの設定と同様に*.cppと変更することで解決した。

この記事が気に入ったらサポートをしてみませんか?