FreeBSD の差分 make のやり方2009年08月27日 00時57分14秒

FreeBSD のソースコードもどんどんと増えている。また、GCC の性能もあがっているが、それに伴いコンパイルにかかる時間も伸びている。何年かに一度ハードウェアを更新すると、一気に早くなる。各々の時期に一般的なハードウェアに対する FreeBSD のコードのコンパイル時間は、3.0 から使い始めた当初からあまり変わっていない様に感じる。それでも一時間から二時間はかかる。

その時間を短縮するために、変わった部分だけをコンパイルすれば大分時間を短縮することが出来る。world の場合は、-DNO_CLEAN を kernel の場合は、-DNO_KERNELCLEAN を付けることにより、変わっていない部分を無視させることが出来る。

しかし、これも時折失敗することがある。その原因は make: don't know how to make /usr/src/xxx. Stop が全てだと思う。make が作成した .depend ファイルに削除されたファイルの記述があり、make がそれを探すのでエラーになる。また、一部でアセンブラコードを生成する場所もあり、そこで削除されたファイルにより同じようなエラーになる。

そのような時は、


% find /usr/obj -name '.depend' -or -name '*.S' | xargs rm

で依存関係のみを削除する。大体、一つこのエラーが出ると、他でも大体起きているので、一気に全て削除した方が手間が少ない。


% cd /usr/src && make cleandepend

でも出来ると聞いたこともあるが、自動生成のアセンブラプログラムで問題が起きそうなので自分では試したことはない。

なお、この方法は CVS でファイルを取得するのなら、過去のソースコードに遡ったときでも使える。CVS が古いリビジョンを取得し、ローカルのファイルの更新時刻を更新するためだ。Subversion ではブランチが違うと同じことは出来ない。また、他の更新時刻を更新しない方法で古いファイルに戻した時も正しく動作しない。

.depend ファイルは全て作り直すが、オブジェクトはそのまま再利用可能なので、新しく buildworld や buildkernel を行なうよりも早い。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2009/08/27/4541648/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。