Sun WorkShop の概要 ホーム目次前ページへ次ページへ索引


付録 B

make ユーティリティとメークファイル

make ユーティリティとメークファイルは、Sun WorkShop でのアプリケーションの自動構築に役立ちます。この付録では、make ユーティリティ、メークファイル、メークファイルマクロに関する基本情報を提供します。また、メークファイルオプションを設定したり、メークファイルマクロを追加、変更、無効にするための Sun WorkShop のダイアログボックスについても説明します。独自のメークファイルを作成しないでプログラムを構築する場合は、「プログラムの構築」「デフォルト値を使用した構築」を参照してください。

make ユーティリティを使用して、プログラムをコンパイルし、リンクする方法を指示できます。一般に、大きなアプリケーションは、複数のソースファイルおよびインクルードファイルの集まりであり、複数のライブラリとリンクする必要があります。ソースファイルの一部を変更すると、その部分を再コンパイルし、再リンクする必要があります。このプロセスを、アプリケーションを構成するファイル間の相互関係と、それぞれの部分の再コンパイルと再リンクに必要なコマンドを指定することによって自動化できます。make は、メークファイル内の指定に基づいて、再コンパイルが必要なファイルだけ再コンパイルし、指定されたオプションとライブラリがリンクされるようにします。

プログラム開発ツールとして make を使用する方法については、『make 改訂版』
(発行 : 株式会社オライリー・ジャパン) などの市販本を参照してください。

メークファイル

makefile と呼ばれるファイルは、どのような構造でソースファイルやオブジェクトファイルが他のファイルに依存しているかを make ユーティリティに示します。また、それらファイルのコンパイルやリンクに必要なコマンドも、このファイルで定義されます。

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

target: dependencies-list
TAB build-commands

target はターゲット、dependencies-list は依存関係リスト、build-commands は構築コマンドです。依存関係リストの各エントリは、ターゲットファイル名を示す行で始まり、その後にそのターゲットが依存するすべてのファイルが続きます。構築コマンドのエントリは、ターゲットファイルを構築する Bourne シェルコマンドを指定した 1 行以上の行で構成されます。これらの行はそれぞれ、タブでインデントする必要があります。

FORTRAN 77 の例

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

pattern.fcomputepts.f は共に、commonblock をインクルードします。ここでは、各 .f ファイルをコンパイルし、これら 3 つの再配置可能ファイルを、一連のライブラリとリンクし、 pattern という名前のプログラムに作成します。

この場合のメークファイルは次のようになります。

コード例 B-1 Fortran 77 用のメークファイル例

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++ の例

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

ターゲットファイルは、次のとおりです。

この場合のメークファイルは次のようになります。

コード例 B-2 C++ 用のメークファイル例

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

make ユーティリティ

make ユーティリティを起動するには、コマンド行から次のコマンドを入力します。

% make

Sun WorkShop の「構築オプション」ダイアログボックスを使用して、アプリケーションに応じて make コマンドに必要なオプションを指定できます。「構築オプションの指定」を参照してください。

make ユーティリティは、現在のディレクトリ内にある makefile または Makefile という名前のファイルを検索し、そのファイルから指示を受け取ります。

make ユーティリティは、次の処理を行います。

  1. メークファイルを読み取り、処理するべきすべてのターゲットファイル、ターゲットファイルが依存するファイル、ターゲットファイルの構築に必要なコマンドを特定する。

  2. それぞれのファイルが最後に変更された日時を検索する。

  3. 依存するファイルよりも古いターゲットファイルがあれば、そのターゲットファイルに対してメークファイルで指定されているコマンドを使用して再構築する。

メークファイルを簡単に作成できるように、make ユーティリティには、ターゲットファイルの接尾辞に応じたデフォルトの規則があります。ファイルの接尾辞が .f の場合は、makef77 コンパイラを使用し、FFLAGS マクロで指定されたすべてのフラグ、 -c フラグ、コンパイルするソースファイル名を引数として渡します。

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

コード例 B-3 make のデフォルトの接尾辞規則

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 をコンパイルします。同様に、ファイルの接尾辞が .f95 の場合は、f95 コンパイラが使用されます。

マクロ

make ユーティリティのマクロ機能を使用すると、パラメータを使用しないで、簡単に文字列を置き換えることができます。たとえば、ターゲットプログラム pattern を構成する再配置可能なファイルの一覧を 1 つのマクロ文字列として表すと、変更する際も処理が簡単です。make のマクロについては、make(1S) のマニュアルページを参照してください。

マクロ文字列は、次の形式で定義します。

% make NAME=string

マクロ文字列であることを示すには、$(NAME) の形式を使用します。この形式が使用されている場合、make ユーティリティは、自動的にそのマクロ文字列を実際の値に置き換えます。

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

OBJ=pattern.o computepts.o startupcore.o

これで、ターゲット pattern に対して、メークファイル内で依存関係のリストと f77 リンクコマンドの両方にこのマクロを使用できます。

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

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

Sun WorkShop の「メークのマクロ」ダイアログボックスを使用すると、WorkShop ターゲットの「マクロ」リストにマクロを追加したり、リストからマクロを削除したり、リスト中のメークファイルマクロに値を割り当て直すことができます。このダイアログボックスの詳細については、「メークファイルマクロの使用方法」を参照してください。

make のコマンド行オプションを使用して、メークファイルマクロの初期値を無効にできます。たとえば、メークファイルの先頭に以下の行を指定します。

FFLAGS=-u

次に、computepts.f のコンパイル行を以下のようにします。

f77 $(FFLAGS) -c computepts.f

最終的なリンクを以下のようにします。

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

引数を指定しないで make コマンドだけを実行すると、上記で設定した FFLAGS の値が利用されます。また、次のようにコマンド行で指定すると、値が上書きされて優先されます。

% make "FFLAGS=-u -O"

make コマンド行の FFLAGS マクロの定義はメークファイルの初期設定よりも優先され、-o フラグと -u フラグの両方が f77 に渡されます。コマンド行で "FFLAGS=" と指定し、マクロをリセットすることもできます。


サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.
ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引