makeコマンドとmakefile

make コマンドは次のように引数なしでも起動できます。

demo% make

make ユーティリティは、現作業ディレクトリから makefile または Makefile という名前のファイルを検索し、その中から指示を取り出します。

make ユーティリティの一般的な動作は次のとおりです。

処理しなければならないターゲットファイル、それらが依存するファイル、ターゲットファイルを構築するためのコマンドをメークファイルから読み取る。

各ファイルが最後に変更された日付と時刻の情報を取り出す。

ターゲットファイルの変更の日付と時刻が、依存するファイルよりも古ければ、メークファイルにあるそのターゲットに関するコマンドを使用してターゲットファイルを再度構築する。

マクロmake ユーティリティのマクロ機能を使用すると、簡単なパラメータなしの文字列置換を行うことができます。たとえば、pattern という名のターゲットプログラムを考えてみると、それを構成する再配置可能なファイルのリストを 1 つのマクロ文字列として表現できるので、変更しやすくなります。

マクロ文字列を定義するときは、次のような形式を使用します。

名前 = 文字列

マクロ文字列を使用するときは、次のように指定します。

$(名前)

これは、make によって、マクロ文字列に指定した実際の値に置換されます。

次の例は、すべてのオブジェクトファイルを指定するマクロ定義をメークファイルの最初に追加します。

OBJ = pattern.o computepts.o startupcore.o

これによって、メークファイルの中で、このマクロを依存性リストに使用したり、ターゲット pattern の f77 リンクコマンド上で使用したりできます。

pattern: $(OBJ) f77 $(OBJ) -lcore77 -lcore -lsunwindow \ -lpixrect -o pattern

マクロ文字列の名前が 1 文字の場合、括弧は省略できます。

マクロ値を置換するmake マクロの初期値は、make のコマンド行オプションで置換できます。たとえば、次の行をメークファイルの先頭に追加してみましょう。

FFLAGS=-u

さらに、computepts.f のコンパイル行は次のようになります。

f77 $(FFLAGS) -c computepts.f

さらに、最終的なリンクは次のようになります。

f77 $(FFLAGS) $(OBJ) -lcore77 -lcore -lsunwindow \ -lpixrect -o pattern

この状態で、引数なしの make コマンドを実行すると、上記 FFLAGS の値が使用されます。しかし、次のようなコマンド行を使用すると、この値を置換できます。

demo% make "FFLAGS=-u -O"

make コマンド行上の FFLAGS マクロの定義は、メークファイルの初期値を無効にし、-O フラグと -u フラグを f77 に渡します。また、"FFLAGS=" をコマンド行上で使用して、マクロの影響を無効にできます。

make の接尾辞規則メークファイルを簡単に書けるようにするため、make にはターゲットファイルの接尾辞に依存して使用される、独自のデフォルト規則があります。.f 接尾辞を認識すると、make は f77 コンパイラを使用し、FFLAGS マクロで指定されたすべてのフラグと、-c オプション、コンパイルすべきソースファイルの名前を引数として渡します。

次の例では、この規則を 2 回利用しています。

OBJ = pattern.o computepts.o startupcore.o FFLAGS=-u pattern: $(OBJ) f77 $(OBJ) -lcore77 -lcore -lsunwindow \ -lpixrect -o pattern pattern.o: pattern.f commonblock f77 $(FFLAGS) -c pattern.f computepts.o: computepts.f commonblock startupcore.o: startupcore.f

make はデフォルトの規則を使用して、computepts.f と startupcore.f をコンパイルします。

同様に、f90 コンパイラを起動するための .f90 ファイル用接尾辞規則もあります。

関連文書現在では、プログラム開発ツールとしての make の使用方法について、優れた本が何冊も市販されています。O'Reilly & Associates から出版されている Oram および Talbott 著『Managing Projects with make』などがあります。