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
インストールのコマンドの二番目の引数として、ディレクトリ名ではなく、常に ファイル名を使いなさい。インストールされるそれぞれのファイルに対して、別々 のコマンドを使いなさい。