メークファイルと呼ばれるファイルは、ソースファイルやオブジェクトファイルの依存関係を体系付けて make ユーティリティに指示します。また、ファイルのコンパイルやリンクに必要なコマンドも、このファイルで定義されます。
構築する各ファイル (実行のステップ) をターゲットと呼びます。メークファイルの各エントリが、ターゲットオブジェクトの依存関係やそのオブジェクトを構築 (make) する上で必要なコマンドを表す規則に相当します。規則の構造は次のとおりです。
target: dependencies-list
TAB build-commands
target はターゲット、dependensies-list は依存関係リスト、build-commands は構築コマンドです。
依存関係リスト−各エントリは、ターゲットファイル名を示す行で始まり、そのターゲットが依存するすべてのファイルが続きます。
構築コマンド−各エントリには、このエントリに対してターゲットファイルを構築する Bourne シェルコマンドを指定する行が 1 行以上含まれます。コマンド行とコマンド行の間は、タブ記号でインデントします。
次のような 4 つのソースファイルとメークファイルから構成されるプログラムがあるとします。
makefile
commonblock
computepts.f
pattern.f
startupcore.f
pattern.f と computepts.f の両方は、commonblock をインクルードし、各 .f ファイルをコンパイルします。この 3 つの再配置可能ファイルを一連のライブラリとともに pattern という名前のプログラムにリンクする場合を考えてみます。
pattern: pattern.o computepts.o startupcore.o f77 pattern.o computepts.o startupcore.o -lcore77 ¥ -lcore -lsunwindow -lpixrect -o pattern pattern.o: pattern.f commonblock f77 -c -u pattern.f computepts.o: computepts.f commonblock f77 -c -u computepts.f startupcore.o: startupcore.f f77 -c -u startupcore.f
このメークファイルの先頭行は、pattern の作成が pattern.o、computepts.o、startupcore.o に依存していることを表します。2 行目以降は、再配置可能な .o ファイルとライブラリから pattern を作成するためのコマンドです。
次のような 5 つのソースファイルとメークファイルから構成されるプログラムがあるとします。
manythreads.cc
Makefilemany.cc
thr.cc
misc.h
defines.h
ターゲットファイルは、many、manythreads、thrI の 3 つとします。
all: many manythreads thrI many: many.cc CC -o many many.cc -g -D_REENTRANT -lm -lnsl -lsocket -lthread thrI: thr.cc CC -o thrI thr.cc -g -D_REENTRANT -lm -lnsl -lsocket -lthread manythreads: manythreads.cc CC -o manythreads -g -D_REENTRANT manythreads.cc -lnsl -lsocket -lthread
このメークファイルの先頭行では、all というラベルを使って、一連のターゲットファイルをまとめています。2 行目以降は、ソースファイルのいずれかと依存関係にある 3 つのターゲットファイルを作成するためのコマンドです。