家ではWindows, Mac, Linux上で開発をしておりできるだけ開発環境を統一するためにVisual Studio CodeをMacに入れてみました。
インストール
コンパイラのインストール
Visual Studio Codeはあくまでエディタなのでコンパイラを入れておく必要があります。
今回は以前、XCodeを入れた際にgccとclangが入ったようなので特に何もする必要がありませんでした。
Visual Studio Codeのインストール
MicrosoftのVisual Studio Codeのサイトからダウンロード。
落とした”Visual Studio Code.app”を適当なディレクトリ(ここではhomeディレクトリ直下にVisualStudioCodeディレクトリを作っています)において実行するとVisual Studio Codeが起動します。
拡張機能のインストール
C/C++用拡張
Visual Studio Code単体ではC/C++のデバッガとして使う機能がないためC/C++用拡張機能をインストールします。
- Codeフォーマット
- 自動補完
- シンボルサーチ
などの入力サポート機能や
- デバッグ機能のサポート
- ステップ実行
- ブレークポイント設定
デバッグ機能が追加されます。これらの機能がないと単なる開発環境としてまったく使えないので真っ先に入れましょう[1]これくらいデフォルトで入れといていてくれよ…と思いますが、C/C++の相対的な地位が落ちたのでしょうかね。。
インストール方法はVisual Studio Codeの左ペインの一番下の拡張機能ボタンを押すと
拡張機能の管理画面になり検索ボックスに「C++」等で検索をかけると拡張機能が出てくるのでインストールすればOKです。あとはVisual Studio Codeを再起動すれば有効化されます。
ソースコード補完プラグインの追加
C/C++拡張での補完機能は開いているソースコードのキーワード補完程度しかできず他のライブラリの関数名補完などができないので、Clangをバックエンドに用いたソースコード補完プラグインを追加します。
拡張機能の管理画面で「C++ Clang」と検索すると出てくる「C/C++ Clang」というプラグインをインストールします。
次にプラグインがClangを見つけられるようにするため「Code」->「基本設定」->「ユーザ設定」
{ "clang.executable": "clang++" }
を追加します。デフォルトではC++11やC++14のコードを書くと警告やエラーが出ててしまうのでC++11/14のコードを書く場合は
{ "clang.cxxflags": ["-std=c++14"] }
を追加しておきましょう。これで、標準ライブラリや自前のライブラリも含めてコード補完をしてくれるようになります。
Runnerの導入
Visual Studio Codeはあくまでエディタなので、書いたコードをビルドや実行するためにシェルスクリプトをキックする拡張機能(Runner)を入れます。インストール方法はC/C++拡張と同様で拡張機能の管理画面で「Runner」と検索し、インストール、有効化すれば良いです。
Runnerを入れると拡張子ごとにスクリプトをキックできるようになります。そのキックするスクリプトを適当なディレクトリ(ここでは~/sh/)に作っておきます。C++用に以下のスクリプト(clang.sh)を作って保存します。
#!/bin/sh cd `dirname $1` if [ -z "$1" ] then echo "need argument" exit fi clang++ -std=c++14 -o out $1 ./out rm out
インストールした直後はディレクトリ変更なしでも動いたのですが、再起動したタイミングでルート直下でコンパイルしようとし
ld: can't open output file for writing: out, errno=13 for architecture x86_64
とエラーが出たのでカレントディレクトリをソースファイルのディレクトリに変更するようにしました。
インストール後に「Code」->「基本設定」->「ユーザ設定」と進み拡張子がcppの場合にclang.shをキックする設定を追加。
// 既定の設定を上書きするには、このファイル内に設定を挿入します { "runner.languageMap": { "cpp" : "~/sh/clang.sh" } }
Runnerを起動するショートカットがMacの場合はバッティングしてしまっているのでショートカットキーを変更します。
「Code」->「基本設定」->「キーボードショットカット」と進み以下を追加。
// 既定値を上書きするには、このファイル内にキー バインドを挿入します [ { "key": "cmd+shift+,", "command": "extension.runner.start", "when": "editorTextFocus" }, { "key": "cmd+shift+.", "command": "extension.runner.stop" } ]
これでエディタにフォーカスがある場合に、コマンドキー、シフトキー、「,」 の同時押しでclang.shがキックされコンパイル&実行されるようになります。
動作テスト
以下のファイル(test.cpp)を作成し、
#include <iostream> #include <array> using namespace std; int main(){ array<int, 4> test{1, 2, 3, 4}; for(auto val : test){ cout << val << endl; } return 0; }
コマンドキー、シフトキー、「,」としてコンパイル&実行されれば成功です。
なお、ファイルが未保存の場合Runnerからシェルスクリプトにファイル名が引数として渡されない仕様のようで
need argument
と出たら一度、ファイルを保存してから実行してみましょう。
参考情報
- [Visual Studio Code][Mac] C言語をビルド(コンパイル)&ステップ実行する
- Mac の Visual Studio Code で C/C++/C# を実行する
- VS CodeのRunnerが動かない。。。
- Visual Studio Code で OS 開発をする
- Visual Studio Code & C++ on OSX(clang)開発環境でC++11対応する
脚注
↑1 | これくらいデフォルトで入れといていてくれよ…と思いますが、C/C++の相対的な地位が落ちたのでしょうかね。 |
---|