2009年11月15日日曜日

【make】8 CとC++

ノウハウ的な内容なので、概要のみ記述。
実際にC/C++のプロジェクトを自分でやるときには、テンプレとして重宝すると思う。


* 8 CとC++
** 8.1 ソースとバイナリの分離
- makeはもともと単一ディレクトリにファイルがまとめ
てあるときにうまく機能するように作られている。
- なので、ソースツリーとバイナリツリーを分けると
きには工夫が必要。
*** 8.1.1 簡単な方法
- makeをバイナリツリーディレクトリから起動する方
法。
*** 8.1.2 難しい方法
- makeをソースツリーディレクトリから起動する方法。
** 8.2 読み出し専用のソース
- yaccなどでソースを生成する場合は、ソースツリーを
読み出し専用にするには困難がある場合がある。
- 古いパッケージはソースツリーにそれら生成ソース
を配置するようにしていることがあるからだ。
- それらに対処するために、リファレンスとして複数の
ソースツリーを持つというのもあり。
** 8.3 依存関係の生成
- 動的に生成する依存関係に関する回避策。
*** 8.3.1 Tromeyの手法
- トリッキーなノウハウ。割愛。
*** 8.3.2 makedependプログラム
- 依存関係を生成するプログラムはいくつかある。Xの
開発の際にはmakedependというプログラムが作られ
た。
- gccは、依存関係生成のスイスアーミーナイフ。実際
にコンパイルに使うプログラムがgccじゃないとして
も、gccを依存関係生成に使うというのもあり。
** 8.4 複数のバイナリツリーを利用する
- ソースツリーとバイナリツリーの分離ができてしま
えば、バイナリツリーを複数化するのは簡単。
** 8.5 部分的なソースツリー
- 大きなプロジェクトでは、個別開発者がプロジェク
ト全体をチェックアウトして作業するのは負担。
- リファレンスをシステム上にひとつ置き、プログラ
マは担当部分のみをチェックアウトする。
- これを実現するには担当しているcomponentについて、
それ以外のヘッダファイルやライブラリファイルは
リファレンスツリーを参照するようにmakefileを調
整する必要がある。
- しかし、この手法はかなり複雑になり、実用性には
疑問もある。
** 8.6 リファレンスビルド、ライブラリ、インストーラ
- SCMについて、CVSを前提としているところが、なんだ
か。せめてSubversionも対象として欲しいところ。


おお、これでmakeを読めるようになるという所期の目的は達成できたような。
次はなにを勉強しようか。せっかくだからもうちょいGNUを掘ってみるかなぁ。

こつこつ。

0 件のコメント: