ビルド時間の短縮 - ccache

何をするにも時間は見つからないだろう。時間が欲しければ自分で作ることだ。
チャールズ・バクストン
ソフトウェアをはじめ開発プロジェクトの永遠の課題「いかに早く仕上げるか」。プロジェクト管理から設計・開発手法まで、その観点は多岐にわたりますが、結局のところ「いかに無駄を省くか」という点につきます(仕様を変えるという方法もありますが・・)。今回は、大規模ソフトウェア開発におけるビルド時間待ち時間の無駄を削減するccacheというコンパイラキャッシュプログラムを紹介します。

コンピュータの処理速度が向上したとしても、それと同等、時にはそれ以上にソフトウェア規模が大きくなってきており、そのビルド時間は膨大です。そして、開発の過程では、ソースコードのコンパイルは何度も繰り返されるものであり、この時間を抑制することは非常に価値があります。いや、今の規模ならまあ待てる範囲で問題ないよ、と言われる場合もありますが、そのような短いコンパイル時間ほど、さらに短くなることによって得られるこ効果が大きいことがあります。1時間も待たされると分かっていれば他の事をしようとしますが、中途半端な待ち時間は単に浪費されることが多いからです。

ビルドツールの基本と言えば、make。適切なMakefileを書けば(あるいは生成するようにしておけば)、不要な再コンパイルを抑制することができ、ビルド効率が改善されます。しかし、いくつかのソースファイルだけのコンパイルでも、それなりの時間がかかることもあります。数十行といった小さなソースファイルでも#includeステートメントによって数珠繋ぎにヘッダファイルがインクルードされていたりすることがあるため、プリプロセッサによる構文解析、及びそれによって増大した大きなソースファイルのコンパイルが必要となることがあるのです。

とはいえ、#includeの部分は開発中そういじるものではありませんので、毎回構文解析やヘッダ部分のコンパイルを行うのは考えても見れば非常に無駄な気がします。ここに目をつけたのがコンパイラキャッシュプログラム ccacheです。

詳しくは、IBMの解説ページが詳しいのでそちらを参照いただきたいのですが、動作としては、一度コンパイルした結果をキャッシュし、次回コンパイル時に部分的にキャッシュが再利用可能な部分をコンパイルせずに、単にキャッシュで置き換えるようにするというプログラムです。使い方もいたって簡単で、通常のコンパイルコマンドにccacheと書くだけです。Makefileを使うなら、
CCACHE = /usr/local/bin/ccache
CC = $(CCACHE) gcc
等と通常のgcc等のコマンドをccache gcc等置き換えるだけです。

実際に使ってみると、二回目以降のコンパイルが驚くほど早くなっているのが実感できます。キャッシュプログラムなので、オープンソースソフトをダウンロードしてmakeするような一度きりのビルドには効果を発揮しませんが、開発中何度も同じツリーをmakeするような場合には、非常に効果的なプログラムです。

※私は使ったことはありませんが、gccに特化したcachecc1というものもあります。

【関連リンク】
ccacheを使って共同作業のビルド時間を改善する (IBM dW)
cachecc1: a gcc cache
Manpage of Make

【関連書籍】
GNUソフトウェアプログラミング―オープンソース開発の原点オライリー・ジャパン
GCC GNU C Compiler―Manual & Reference
make 改訂版オライリー・ジャパン
GNU Autoconf/Automake/Libtool

コメント

非公開コメント

本のおすすめ

4274065979

4844337858

482228493X

4904807057

4873114799


プロフィール

  • Author:proger
  • 組み込み関係で仕事してます

ブログ内検索