Sun WorkShop 入門

メークファイル

メークファイルと呼ばれるファイルは、ソースファイルやオブジェクトファイルの依存関係を体系付けて make ユーティリティに指示します。また、ファイルのコンパイルやリンクに必要なコマンドも、このファイルで定義されます。

構築する各ファイル (実行のステップ) をターゲットと呼びます。メークファイルの各エントリが、ターゲットオブジェクトの依存関係やそのオブジェクトを構築 (make) する上で必要なコマンドを表す規則に相当します。規則の構造は次のとおりです。

target: dependencies-list

TAB build-commands

target はターゲット、dependensies-list は依存関係リスト、build-commands は構築コマンドです。

FORTRAN 77 の例

次のような 4 つのソースファイルとメークファイルから構成されるプログラムがあるとします。

makefile

commonblock

computepts.f

pattern.f

startupcore.f

pattern.fcomputepts.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.ocomputepts.ostartupcore.o に依存していることを表します。2 行目以降は、再配置可能な .o ファイルとライブラリから pattern を作成するためのコマンドです。

C++ の例

次のような 5 つのソースファイルとメークファイルから構成されるプログラムがあるとします。

manythreads.cc

Makefilemany.cc

thr.cc

misc.h

defines.h

ターゲットファイルは、manymanythreadsthrI の 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 つのターゲットファイルを作成するためのコマンドです。