Help us understand the problem. What is going on with this article?

ぬるグラマー向け開発環境構築

More than 5 years have passed since last update.

この記事は、C++ Advent Calendar 2013 - PARTAKE 16日目の記事です。

お手軽に開発環境を構築したい

さっとファイルと修正したり、コンパイル通るか確認するためだけに、重いIDEを開くのはめんどいです。メイン開発がJavaなので、常にEclipseかIDEAが起動している、という事情もあります。
昔はVim派だったのですが、マシン間あるいはOS間で設定を揃えるのがめんどくさくなって(特にプラグイン)、エディター+コマンドプロンプト (orターミナル) という、なあなあ開発環境でやり過ごしてました。「ハッカーはめんどくさい作業をしないように、エディターにこだわりまくる」という格言がありますが、“ぬるグラマー”はその労力すら惜しむのです(自己矛盾)。

とまぁそんな前口上はさておき、最近スクリプト系言語でSublime Text2を使い始めたところ、想像以上使い易かったので、C++もこれに切り替えて使い始めました。

Sublime Text2 + SublimeClang で基本OK

Sublime Textは、何もしなくても、「Build (⌘+B)」と「Run (⌘+Shift+B)」というツールがついています。すばらしいですね。Macは(普通は)何もしなくても g++ コマンドが使えるので、デフォルト状態でコンパイルできます。Winは、path にC++コンパイルのコマンドを通せば可能のようです。BuildとRunは↓な感じ。

Tool Screen.png

さらに、Packege Control を使用して、SublimeClangというプラグインを入れると、保存の度にコンパイルして、結果を表示してくれます。なお、Macの場合は内部でClangを呼び出すために(?) Command Line Toolsが必要です。OSX10.9以降の方は $ xcode-select --install でインストールしてからどうぞ (実はこれに超ハマった…)。

CompileAtSave.png

※上のコードは C++ Design Patterns and Derivatives Pricing の最初のサンプルコードの写経で、記事とは何の関係もありません。

「Alt+D,Alt+D」で参照先移動したり、「Alt+D,Alt+O」でプロジェクト全体をコンパイル検査したりしてくれます。私はショートカットをF12とF5に変えて某IDEと揃えましたが、キーバインドは Preference > Key Bindings で手軽に編集できます。以下は一例(一部抜粋)。

[
    {
        "keys": ["f12"],
        "command": "clang_goto_def", 
        "context": [
            {"key": "clang_supported_language"}
            ]
    },
    {
        "keys": ["ctrl+f12"],
        "command": "clang_goto_implementation",
        "context": [
            {"key": "clang_supported_language"}
            ]
    },
    {
        "keys": ["shift+f12"],
        "command": "clang_go_back",
        "context": [
            {"key": "clang_supported_language"}
            ]
    }
]

外部ファイルについては、*.sublime-project ファイルに sublimeclang-options-I/[path] を設定すれば、include のファイルも呼び出せます。手軽に使う上では特に支障ないです。依存関係がそれなり複雑なプロジェクトになると、使えるようにするまでに大変なんですけど。。。*.vcproj はよくできてますね(何)。

ちなみに、SublimeClangプラグインは、開発ストップ中で、Sublime Text3向けに絶賛開発中とのこと。Sublime Text3限定だと、似たようなのを別の方が作成しているみたいです。→pfultz2/ClangComplete · GitHub

clang-format でコード整形

ぬるグラマーとしてはこれで十分なのですが、どうせならコードの整形もやりたいです。pull/request ドリブンが主流だと、余計な改行やスペースで差分が出るのは煩わしいです。
C++のコード整形は clang-format を使っていますが(というか他に何があるのか知らない)、LLVMにプラグインがありました。

https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-sublime.py

このファイルのコメントにプラグインの使い方が書いてあります。今使っているMacだと clang-format が無かったので、1からビルドせざるを得ませんでしたが、プラグイン自体は所定のフォルダに突っ込めば使えました。フォーマットの細かい設定は特別なことは不要で *.clang-format ファイルを用意して、自分好みのに設定すればOKです。

というわけで、複素数偏角Fizzbuzzを書いてみました(元ネタ:Fizzbuzz in Complex Plane)。

(整形前) ※ちょっとワザとらしい

#include <complex>
#include <string>
#include <iostream>

std::string fizzbuzz(int n) {
    std::string fizzbuzz[4] 
    = {"Fizzbuzz","Buzz","%d","Fizz"};
    std::complex<double> z(-n % 5, n % 3);
    char s[9];sprintf(s, fizzbuzz[(int) arg(z)].c_str(), n);std::string ss = s;
        return ss;
}

int main() {
    for (int i=1; i<=100; i++) {
        std::cout << fizzbuzz(i) << std::endl;
    }
}

(整形後) 選択範囲で「Ctrl+Shift+C」

#include <complex>
#include <string>
#include <iostream>

std::string fizzbuzz(int n) {
  std::string fizzbuzz[4] = { "Fizzbuzz", "Buzz", "%d", "Fizz" };
  std::complex<double> z(-n % 5, n % 3);
  char s[9];
  sprintf(s, fizzbuzz[(int)arg(z)].c_str(), n);
  std::string ss = s;
  return ss;
}

int main() {
  for (int i = 1; i <= 100; i++) {
    std::cout << fizzbuzz(i) << std::endl;
  }
}

まとめ

ひとまず、Sublime Text2で、ゆるふわC++開発の紹介でした。結局カスタマイズいろいろして、「PC間で共通の設定にするのめんどくさいじゃないか」というツッコミはスルーさせていただきます。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away