Makefileはあるコマンドやオプションなどを上書きするために変数を提供するべ きだ。
とりわけ、ほとんどのユーティリティ・プログラムを変数を通して走らせるべき
だ。だから、もしBisonを使うなら、BISONと名付けられた、そのデフォ
ルトの値が`BISON = bison'と設定されている変数を持ち、Bisonを使う必
要があるときにはいつでも$(BISON)を使ってそれを参照しなさい。
ln、rm、mvなどなどのようなファイル管理ユーティリティ
はこのやり方の変数を通した参照をする必要はない。ユーザはそれらを他のプロ
グラムと置き換える必要がないので。
それぞれのプログラム名変数は、プログラムにオプションを与えるのに使われる
オプション変数と一緒に使われるべきだ。オプション変数の名前を得るのにプロ
グラム名変数の名前に`FLAGS'を付け加えなさい。—例えば、
BISONFLAGSのように。(Cコンパイラに対するCFLAGS、yaccに対す
るYFLAGS、lexに対するLFLAGSの名前はこの規則には例外的だが、
我々はそれらは標準的なのでそうしておく。) プリプロセッサを走らせるどのコ
ンパイルのコマンドでもCPPFLAGSを使い、ldの直接的な使用だけ
ではなく、リンクを行うどのコンパイルのコマンドでもLDFLAGSを使いな
さい。
もしあるファイルの適切なコンパイルに使われなければならないCコンパ
イラのオプションがあれば、CFLAGSにそれらを入れてはいけない。ユー
ザはCFLAGSを自分で自由に指定できると期待する。代わりに、
CFLAGSとは独立に必要なオプションをCコンパイラに渡すように調整しな
さい。次のように、それらを明示的にコンパイルのコマンドに書くか、暗黙の規
則を定義することによって。
CFLAGS = -g
ALL_CFLAGS = -I. $(CFLAGS)
.c.o:
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
`-g'オプションをCFLAGSに入れなさい。なぜなら、それは適切なコ
ンパイルには必要ではないからだ。それを単に推奨されるデフォルトで
あると考えることができる。もしパッケージがデフォルトでGCCでコンパイルさ
れるように設定されているなら、CFLAGSのデフォルトの値に`-O'も
入れてもいい。
ユーザが他を上書きするのにCFLAGSを使うことができるので、
CFLAGSをコンパイルのコマンドの最後、コンパイラのオプションを含む
他の変数の後に置きなさい。
CFLAGSは、コンパイルを行うのとリンクを行う両方の、Cコンパイラのあ
らゆる起動で使われるべきだ。
あらゆるMakefileはINSTALLという変数を定義するべきで、それはファイ
ルをシステムにインストールするための基本的なコマンドである。
あらゆるMakefileはまたINSTALL_PROGRAMとINSTALL_DATAという
変数を定義するべきだ。(これらは各々デフォルトは$(INSTALL)であるべ
きだ。) そして、これらの変数を実際のインストールのコマンドとして、それぞ
れ実行ファイルと実行ファイルでないものに対して使うべきだ。これらの変数は
次のように使いなさい。
$(INSTALL_PROGRAM) foo $(bindir)/foo
$(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
インストールのコマンドの二番目の引数として、ディレクトリ名ではなく、常に ファイル名を使いなさい。インストールされるそれぞれのファイルに対して、別々 のコマンドを使いなさい。