「コンパイルの話:止まらないビルド」の編集履歴(バックアップ)一覧はこちら
「コンパイルの話:止まらないビルド」(2005/12/26 (月) 21:45:20) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
PCの日付には注意しましょう。
あるPCでビルドする際に、別のPCから持ってきたソースファイルをあわせてビルドしようとすると、いつまでたってもビルドが終わらないことがあったりしやがります。
んで、ビルドログを見てみると、どうやらず~~~~~~~~~~~~~~~っと同じところをコンパイル繰り返していたりするのです。
原因は、持ってきたソースファイルを編集したPCの時計が進んでいたから。
種明かしはMakefileにあります。
あるソースファイル、例えば<test.c>とオブジェクトファイル<test.o>がMakefileで以下のように依存関係を持っていたとします。
【例】
test.o :test.c
cc test.c
すると、ビルドするときに<test.c>と<test.o(あるなら)>の日付をチェックして、<test.o>よりも<test.c>のファイルスタンプが新しければ前回コンパイル時から後進されていると判断してコンパイルしてくれます。
そう、ここにからくりがあるのです。
<test.c>が未来の日付だったら・・・?
当然、生成される<test.o>はその時点のタイムスタンプを持ちます。したがって、その時点ですでに<test.c>よりも古いファイルとみなされるわけです。
そういうわけで、再び同じファイルをコンパイルにかかります。あとはこの繰り返し。そのソースファイルが持っているタイムスタンプよりもPCの時計が進むまで、延々コンパイルを繰り返してしまうのです。
「ビルド時間かかるから」なんて、ちょっとコーヒー飲みに行ったりタバコ吸いに行ったりして、リフレッシュして帰ってきたのもつかの間、とてつもない疲労感にかられてしまう罠ともなりえます。
くれぐれも、時計はきちんと合わせましょう。
表示オプション
横に並べて表示:
変化行の前後のみ表示: