C/C++ 開発のストレスを軽減する
少し前に Eclipse から NetBeans に移行したが、再度 Eclipse にもどることにした。なぜかというと、Neteans は SVN コミットで日本語コメントを入れるとエラーになったりしてストレスを感じていたのだ*1。ありえないよね、もったいない・・・。
いろいろと試した結果、Eclipse でも C/C++ プロジェクトではなく makefile プロジェクトを選択すれば十分に快適ということが分かった。もちろん、makefile を書かなくてはならないのだが、どうせ Autotools 向けのものは書くので苦にはならない。
これで基本的には OK。しかし、開発対象が途上であると Autotools は中々面倒くさくて、コードを追加していくと configure.ac や Makefile.am をいじることになり、その度に ./configure しないといけない。./configure は時間がかかるため、結構なストレスになる。
そこで、他のビルドルールを試すことにした。比較結果は以下のサイトがよくまとまっていると思う。
試したのは CMake、SCons の二つ。なぜかというと、Visual C++ コンパイラを使ったビルドが簡単で、Objective-C コードのビルドも難なくこなせるからだ。マルチプラットフォームに対応したコードを開発する上で、これは重要である*2。
一ヶ月ほど 30000 行程度のあるコードのビルドを Autotools、CMake、SCons で、それぞれ Windows、Linux、Mac OS X 上で試用してみた。所感は以下のとおり。
- Autotools
- どんな環境でも動くといっていい
- ./configure には結構時間がかかる
- Visual C++ との連携が困難
- CMake
- そこそこ速い
- 記述量の少なさはピカイチ
- Objective-C コードのビルドに関して以下のような問題がありちょっと気持ち悪い
- Visual C++ との連携が容易
- SCons
この程度のコード量だと、大規模開発にはスケールしないと言われている SCons でも十分実用に耐えるビルド速度だった。SCons は確か差分ビルドの基準がファイルの MD5 だったりしたので、その辺が効いてくるんじゃないだろうか。この辺を変更したい場合は、StackOverflow に投稿されている以下の質問が参考になる。
env.Decider('timestamp-newer') としてやれば、タイムスタンプで差分を検出するようになり、scons -j 2 などとすれば並列でビルドしてくれるようになるらしい。
結局 Autotools と SCons を使うことにした。CMake は Objective-C がちょっと怪しいので止めた。ビルド設定を二種類メンテナンスしていくのは骨が折れるので、そのうち SCons 一本でいくかもしれない。
ストレス軽減のまとめ。