🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: ca.test
Article #9280

test-ignore93kをもう一度

#9280
From: test3
Date: Fri, 27 Oct 1995 00:00
528 lines
33448 bytes

 
NMAKE.WRI ファイル
Microsoft(R) Visual C++, バージョン 1.5 の NMAKE ユーティリティの解説
(C) Copyright Microsoft Corporation, 1995


NMAKE によるプロジェクトの管理
ここでは、Microsoft Program Maintenance ユーティリティ (NMAKE) について説明し
ます。NMAKE は、プロジェクト管理にかかる時間を短縮し簡素化する高度なコマンド プ
ロセッサです。プロジェクトを構成しているファイルの依存関係を指定しておくことによ
り、前回のビルドから変更のあったファイルだけを再コンパイルして、プロジェクトを自
動的にビルドします。
プロジェクトのビルドに Visual Workbench を使っているとき、Visual Workbench は自
動的にメイクファイルを作り、Visual Workbench 自身がプロジェクトを管理します。
Visual Workbench を使わずにプログラムをビルドするときや、すでにあるメイクファイ
ルの内容を理解したり修正するとき、または外部プロジェクトを使うときには、このファ
イルを参照してください。
このバージョンの NMAKE は、32 ビット MS-DOS 対応の拡張プログラムであるため、
プロテクト モードで動作する 80386 またはそれ以上の CPU が必要です。また、
DOSXNT.EXE が NMAKE と同じディレクトリか、パスの通ったディレクトリに存在し
なければなりません。Microsoft Windows 上で NMAKE を使うときは、SYSTEM.INI の 
[386Enh] セクションで DOSXNT.386 が DEVICE 文で指定されていなければいけませ
ん。
新しい特徴
このバージョンの NMAKE には、次のような新しい特徴があります。

■	新規オプション : /B, /K。
■	.SUFFIXES のリストに .CPP と .CXX が追加されました。
■	C++ プログラム用の組込みマクロ : CPP, CXX, CPPFLAGS, CXXFLAGS
■	C++ プログラム用のあらかじめ定義されている推論規則 
■	!MESSAGE ディレクティブ
■	2 つのプリプロセッサ演算子 : DEFINED, EXIST
■	!ELSE ディレクティブで使われる 3 つのキーワード : IF, IFDEF, IFNDEF
■	新規ディレクティブ : !ELSEIF, !ELSEIFDEF, !ELSEIFNDEF)
NMAKE の概要
NMAKE は、ファイルの最終変更日時を示す“タイム スタンプ”をもとに処理を行いま
す。多くのオペレーティング システムでは、2 秒間隔でタイム スタンプを設定していま
す。NMAKE は、“ターゲット”ファイルと“依存”ファイルのタイム スタンプを比較
します。ターゲット ファイルとは、通常、実行可能ファイルなど、これから作ろうとする
ファイルを指しますが、実行させたいコマンドを示すラベルを指すこともあります。また
依存ファイルとは、ソース ファイルなどターゲットを作るもととなるファイルです。ター
ゲット ファイルよりもあとに依存ファイルが変更されたときや、ターゲット ファイルが
存在しないときは、そのターゲットは更新が必要になります。(タイム スタンプが 2 秒間
隔で割り当てられることによって発生する、ビルドへの影響については、 /B オプション
の項を参照してください。)

注意 :	NMAKE を正しく動作させるため、以前の設定と矛盾がないようにシステムの日
付と時刻を設定してください。システムを起動させるたびに日付と時間を設定するときは、
正確に設定するよう注意してください。システムが設定を記憶しているときは、メモリ バ
ック アップ用電池が動作していることを確認してください。

NMAKE は、メイクファイルで定義された命令にしたがって処理を行います。NMAKE を
実行すると、“メイクファイル”が読み込まれます。メイクファイル (記述ファイルとも
呼ばれます) は、さまざまな命令で構成されるテキスト ファイルです。NMAKE はこの
命令を使って、プロジェクトをビルドします。命令は、記述ブロック、マクロ、ディレク
ティブ、推論規則で構成されます。通常、各記述ブロックには、ターゲットとその依存フ
ァイル、ターゲットをビルドするためのコマンドが記述されます。NMAKE は、ターゲッ
トのタイム スタンプと、依存ファイルのタイム スタンプを比較します。ターゲットの最
終変更日時以降に依存ファイルが変更されているとき、NMAKE は、記述ブロックに示さ
れているコマンドを実行し、ターゲットを更新します。
メイクファイルがないときでも NMAKE を実行することができます。NMAKE は、メイ
クファイルが存在しなければ、コマンド ラインまたは TOOLS.INI から受け取った命令
とともに、組込みマクロや推論規則にしたがってターゲットをビルドしようとします。
NMAKE の主な目的は、早く簡単にプログラムをビルドすることにあります。しかしそれ
だけでなく、NMAKE はほかのプログラムを起動したり、オペレーティング システムの
コマンドも実行できるので、コンパイルやリンクに限らず、ほかの目的にも使うことがで
きます。NMAKE は、バックアップの作成やファイルの移動などに、また通常はオペレー
ティング システムのプロンプトで行っているようなプロジェクト管理などにも使うこと
ができます。
このファイルでは、ターゲットを構築することを“ビルド”と呼んでいますが、これはタ
ーゲットと依存ファイルのタイム スタンプを比較し、ターゲットの最終変更日時が古いと
きに、そのターゲットを構築するためのコマンドを実行することを指します。“ビルド”
という用語は、ターゲットが実際に生成されたかどうかにかかわらず、この意味で使われ
ています。
NMAKE の実行
NMAKE を起動するときは、次のような構文を使います。

NMAKE 【options】 【macros】 【targets】

options フィールドには、NMAKE のオプションを指定します。NMAKE のオプション
については、「コマンドライン オプション」を参照してください。
macros フィールドには、メイクファイルのテキストを変更するためのマクロ定義を指定
します。マクロの構文については、「ユーザー定義マクロ」を参照してください。
targets フィールドには、ビルドするターゲットを指定します。コマンド ラインで指定さ
れたターゲットだけがビルドされます。ターゲットを指定しなければ、メイクファイルの
中の最初の依存関係行で 1 番目に指定されているターゲットだけがビルドされます (疑
似ターゲットを使って、1 つ以上のターゲットをビルドできます。詳しくは、「疑似ター
ゲット」の項を参照してください。)
NMAKE によるビルド処理は、次に示す優先順位にしたがって進められます。

1.	/F オプションを指定したとき、NMAKE は指定されたメイクファイルをカレン
ト ディレクトリまたは指定されたディレクトリで探します。ファイルが見つからないと、
NMAKE は処理を中止してエラー メッセージを表示します。
2.	/F オプションを指定しないときは、NMAKE はファイル名が“MAKEFILE”と
いうメイクファイルをカレント ディレクトリで探します。
3.	MAKEFILE が見つからないときには、NMAKE はコマンド ラインで指定され
たターゲット ファイルを調べ、推論規則 (TOOLS.INI で定義されているもの、またはあ
らかじめ定義されている推論規則) を使ってビルドを試みます。このため、そのターゲッ
トに対して適用できる推論規則があれば、メイクファイルなしで NMAKE を使うことも
できます。
4.	メイクファイルがなく、コマンド ラインにターゲット ファイルの指定もされて
いなければ、NMAKE は処理を中断して、エラー メッセージを表示します。

例
次に示すコマンドでは、オプション (/S)、マクロ定義 ("program=sample") を指定して、
2 つのターゲット (sort.exe と search.exe) をビルドするように NMAKE に指示してい
ます。この例では、メイクファイルを指定していないので、NMAKE は MAKEFILE を
探すか、または推論規則を使ってビルドします。

NMAKE /S "program=sample" sort.exe search.exe

コマンドライン オプション
NMAKE の処理を制御するために、いくつかのオプションがサポートされています。オプ
ションは大文字でも小文字でも指定できます。また、指定するときには、オプション名の
前にスラッシュ (/) またはマイナス記号 (-) のどちらかを付けてください。
メイクファイルや TOOLS.INI ファイルの中で指定できるオプションもあります。
TOOLS.INI について詳しくは、このファイルの「TOOLS.INI ファイル」を参照してく
ださい。!CMDSWITCHES ディレクティブを使ったオプションの指定については、「プ
リプロセス ディレクティブ」を参照してください。

/A
	ターゲット ファイルのタイムスタンプが各依存ファイルに対して新しい場合で
も、評価されたすべてのターゲットをビルドします。このオプションは、関係のないター
ゲットはビルドしません。
/B
	タイム スタンプが同じでも、依存関係行を実行します。多くのオペレーティング 
システムでは、ファイルにタイム スタンプを付けるときに、2 秒の間隔を置いて行います。
コマンドの実行が速いと、NMAKE は実際には古いファイルでも、更新の必要がないと判
断することがあります。このオプションを指定すると、必要外のビルドが行われる可能性
もありますが、高速なマシン上で NMAKE を使っているときには指定することをおすす
めします。
/C
	致命的でないエラーや警告メッセージ、タイム スタンプ、NMAKE 起動時の開
始メッセージを表示しないようにします。/C と同時に /K が指定されているときは、/K に
よって発行される警告メッセージも表示しません。
/D
	NMAKE 実行中に情報の表示を行います。情報は、NMAKE のデフォルト出力
に間隔を置いて表示されます。NMAKE は、ビルド処理中に評価された各ターゲットと依
存ファイルのタイム スタンプと、ターゲットが存在しないときはメッセージを表示します。
依存ファイルは、そのターゲット ファイルの前にインデントされて表示されます。/D と 
/P オプションは、メイクファイルのデバッグに便利です。
	メイクファイル中で部分的に /D を設定または解除するには、!CMDSWITCHES 
ディレクティブを使います。詳しくは、「プリプロセス ディレクティブ」を参照してくだ
さい。
/E
	メイクファイルのマクロ定義よりも環境変数が優先されます。「マクロ」を参照
してください。
/F filename
	filename にメイクファイル名を指定します。filename の前には、スペースまた
はタブを入れることができます。ファイル名のかわりにハイフン (-) を指定すると、
NMAKE は標準入力デバイスからの入力をメイクファイルの入力として読み込みます 
(入力を終了するには、[F6] キーまたは [Ctrl]+[Z] キーを使います)。NMAKE は複数の
メイクファイルを読み込むことができます。複数指定するときには、各メイクファイルご
とに /F オプションを指定します。
	/F オプションを省略すると、NMAKE はカレント ディレクトリで MAKEFILE 
(拡張子なし) という名前のファイルを探し、それをメイクファイルとして使います。
MAKEFILE が見つからなければ、NMAKE は推論規則を使ってコマンド ラインで指定
されたターゲット ファイルをビルドします。
/HELP
	NMAKE のコマンド ライン構文の要約を表示します。
/I
	メイクファイルに書かれているすべてのコマンドからの終了コードを無視します。
エラーが発生しても、NMAKE はメイクファイルの終わりまで処理を行います。メイクフ
ァイルの中で部分的に終了コードを無視するには、ハイフン (-) コマンド修正子また
は .IGNORE ディレクティブを使います。それぞれ、このファイルの「コマンド修正子」
と「ドット ディレクティブ」を参照してください。メイクファイル中で部分的に、/I を設
定または解除するには、!CMDSWITCHES ディレクティブを使います。このファイルの
「 プリプロセス ディレクティブ」を参照してください。ビルドに関係ないところでのエ
ラーを無視するには、/K オプションを使います。両方指定されたときには、/I が /K に
優先します。
/K
	エラーでコマンドが停止したときに、依存ツリーに関係ない部分に対するビルド
を継続して行います。デフォルトでは、NMAKE はコマンドから 0 以外の終了コードが
返されると実行を中断します。このオプションが指定されていると、コマンドから 0 以外
の終了コードが返されたときに、NMAKE はそのコマンドを含むブロックの実行を中断し
ます。NMAKE はそのコマンドを必要としているターゲットのビルドをせずに、警告メッ
セージを表示してほかのターゲットをビルドします。/K が指定されているときに、ビルド
が完了しないと、NMAKE は終了コード 1 を返します。この点は、/I オプションと異な
ります。/I オプションはすべての終了コードを無視します。両方指定されたときには、/I が 
/K に優先します。/C オプションを指定すると、/K で発行される警告メッセージの表示を
禁止します。
/N
	メイクファイルのビルド時に実行されるコマンドを表示するだけで、実行はしま
せん。プリプロセス コマンドは実行されます。メイクファイルのデバッグや更新すべき古
いターゲット ファイルをチェックするのに便利なオプションです。メイクファイル中で部
分的に /N を設定または解除するときには、!CMDSWITCHES ディレクティブを使いま
す。「18.9.2  プリプロセス ディレクティブ」を参照してください。
/NOLOGO
	NMAKE 起動時の開始メッセージを表示しないようにします。
/P
	すべてのマクロ定義、推論規則、ターゲット ファイルの記述、および .SUFFIXES 
ディレクティブのリストを、NMAKE の実行を開始する前に標準出力デバイスに表示しま
す。メイクファイル、またはコマンドラインでターゲットを指定しないで /P を指定する
と、NMAKE はこれらの情報とエラーを表示します。/P と /D オプションは、メイクフ
ァイルのデバッグをするときに便利です。
/Q
	ビルドによって更新する必要があるターゲット ファイルのタイム スタンプをチ
ェックします。ただし、ビルドは行いません。ターゲットがすべて更新されていれば 
NMAKE は 0 を返し、更新が必要なターゲットがあれば 0 以外の数を返します。メイク
ファイルのプリプロセス コマンドだけが実行されます。NMAKE をバッチ ファイルから
実行するときに便利なオプションです。
/R
	.SUFFIXES のリストを解除して、推論規則、TOOLS.INI で定義されているマ
クロまたは組込みマクロを無視します。
/S
	メイクファイルに書かれているコマンドを表示しないようにします。メイクファ
イル中で部分的にコマンド表示を禁止するには、@ コマンド修正子または .SILENT ディ
レクティブを使います。それぞれ、このファイルの「コマンド修正子」、「ドット ディレ
クティブ」を参照してください。メイクファイル中で部分的に /S を設定または解除する
には、!CMDSWITCHES ディレクティブを使います。このファイルの「プリプロセス デ
ィレクティブ」を参照してください。
/T
	コマンド ラインで指定されたターゲット (またはターゲットが指定されなけれ
ばメイクファイル中の最初のターゲット) のタイム スタンプを現在の時間に変更します。
メイクファイルのプリプロセス コマンドが実行され、ビルドは行われません。ターゲット
の内容は変更されません。
/X filename
	すべてのエラー出力 (NMAKE および実行されたコマンドからのもの) を 
filename へ出力します。filename には、ファイルまたはデバイスを指定できます。
filename の前には、スペースまたはタブを入れることができます。ファイル名のかわりに
ハイフン (-) を指定すると、エラー出力は標準出力デバイスへ送られます。デフォルトで
は、NMAKE はエラーを標準エラーに送ります。
/?
	NMAKE のコマンドラインの構文の要約を表示して NMAKE を終了し、オペレ
ーティング システムへ戻ります。
例
次の例では、2 つの NMAKE オプションを指定しています。

NMAKE /F sample.mak /C targ1 targ2

/F オプションにより NMAKE は、メイクファイル SAMPLE.MAK を読み込みます。/C 
オプションにより NMAKE は、致命的でないエラーや警告メッセージを表示しないよう
にします。更新するターゲット ファイルとして targ1 と targ2 の 2 つを指定していま
す。
NMAKE コマンド ファイル
同じコマンドラインの引数を繰り返し使うようなとき、引数をテキスト ファイルに記述し
ておき、そのファイル名をコマンド ラインの引数として NMAKE に渡すことができます。
NMAKE はそのコマンド ファイルをオープンして、引数を読み込みます。この機能は、
引数のリストがオペレーティング システムのコマンド ラインの最大長 (MS-DOS では 
128 文字) を超えるようなときに、特に有効です。
NMAKE のコマンド ラインでコマンド ファイルを指定するときは、次の構文を使います。

NMAKE @commandfile

commandfile フィールドには、NMAKE のコマンド ラインに入力する情報が記述された
テキスト ファイルの名前を入力します。コマンド ファイルの名前の前にアット マーク 
(@) を付けて指定してください。また、ファイル名はディレクトリ パスを付けて指定でき
ます。
NMAKE は、指定されたファイルを 1 つのコマンドライン引数として扱います。NMAKE 
は、ファイルの中の各行の改行をスペースに置き換えます。したがって、マクロ定義がス
ペースを含んでいるときには、クォーテーション マークで囲む必要があります。このファ
イルの「マクロを定義する場所」の項を参照してください。
コマンド ラインの指定とコマンド ファイルの指定とは、分けて入力できます。コマンド 
ラインの必要な箇所で、@commandfile を指定してください。コマンドライン入力は、コ
マンド ファイルの指定した箇所の前後で行うことができます。コマンド ファイルは複数
指定できます。

例 1
この例では、次に示すような内容を持つファイル UPDATE を使っています。

/S "program = sample" sort.exe search.exe

次のように指定すると、NMAKE はコマンド ラインの引数を UPDATE から読み込みま
す。

NMAKE @update

この例の結果は、次のように直接コマンドライン引数を入力したときと同じになります。

NMAKE /S "program = sample" sort.exe search.exe

例 2
この例では、次に示すような内容を持つファイル UPDATE を使っています。

/S "program ・
= sample" sort.exe search.exe

円記号 (・) を使うと、マクロ定義を次の行に続けて書くことができます。

例 3
この例では、次に示すような内容を持つファイル UPDATE を使っています。

/S "program = sample" sort.exe

次のように指定すると、NMAKE はコマンド ラインの引数を UPDATE から読み込みま
す。

NMAKE @update search.exe

TOOLS.INI ファイル
よく使う情報を初期化ファイル TOOLS.INI に書き込んで、NMAKE をカスタマイズす
ることができます。NMAKE の設定は、タグ [NMAKE] で始まる行のあとに書きます。
タグは大文字小文字の区別がありません。初期化ファイルのこのタグの部分に、メイクフ
ァイルの情報を書き込みます。NMAKE は、/R オプションを指定して起動したとき以外
は、すべてのセッションでこの情報を使います。NMAKE は、最初にカレント ディレク
トリで TOOLS.INI を探し、見つからないときは環境変数 INIT に指定されているディレ
クトリで探します。
!CMDSWITCHES ディレクティブを使って、TOOLS.INI でコマンドライン オプション
を指定できます。この方法で指定したオプションは、すべての NMAKE セッションで有
効です。この方法は、ほかのユーティリティでもサポートされている環境変数からオプシ
ョンを受け取る方法と同じ効果があります。!CMDSWITCHES について詳しくは、この
ファイルの「プリプロセス ディレクティブ」を参照してください。
TOOLS.INI ファイルに記述されているマクロと推論規則は、変更することができます。
このファイルの「マクロ定義の優先順位」と「推論規則の優先順位」を参照してください。
NMAKE は、最初に TOOLS.INI からの情報を読み込み、次にメイクファイルの情報を
読み込みます。したがって、たとえば TOOLS.INI の中の記述ブロックは、メイクファイ
ルの記述ブロックの先頭部分として扱われます。/R が指定されていないかぎり、すべての 
NMAKE セッションでこのように動作します。
TOOLS.INI ファイル内でコメントを記述するときには、行の先頭をセミコロン (;) で始
めてください。また、メイクファイルと同じようにシャープ記号 (#) のあとにコメントを
記述することもできます。詳しくは、このファイルの「コメント」を参照してください。

例
次に、TOOLS.INI ファイルの記述例を示します。

[NMAKE]
; macros
CC     = qcl
CFLAGS = /Gc /Gs /W3 /Oat
; inference rule
c.obj:
	$(CC) /Zi /c $(CFLAGS) $*.c

TOOLS.INI に上に示したコードがあると、NMAKE は [NMAKE] のあとの行を読みま
す。この例では、Microsoft QuickC コンパイラ (QCL.EXE) を起動するためにマクロ CC 
を再定義し、マクロ CFLAGS を定義し、そして .C ソースから .OBJ ファイルを作るた
めの推論規則を再定義しています。これらの NMAKE の機能はこの章で説明しています。
メイクファイルの内容
NMAKE のメイクファイルは、記述ブロック、マクロ、推論規則、およびディレクティブ
で構成されています。この節では、メイクファイルを書く上での概要をまとめています。
メイクファイルの各要素については、以降の節で説明します。
制御文字のリテラルとしての使用
必要ならば、NMAKE が制御文字として用いる文字を使うこともできます。NMAKE の
制御文字は、次のとおりです。
:  ;  #  (  )  $  ^  ・  {  }  !  @  -
NMAKE の制御文字を、制御するために使うのではなくリテラル文字として使うときは、
その文字の前にカレット (^) を付けます。NMAKE は、制御文字以外の文字の前に置かれ
たカレットは無視します。クォーテーションで囲まれたカレットは、リテラル文字と見な
されます。
カレットを行の最後で使って、文字列やマクロの定義にリテラルとして改行文字を使うこ
とができます。このカレットによって、NMAKE は、改行文字を改行ではなく、マクロの
一部であると解釈します。この機能の意味は、マクロ定義の行を継続する円記号 (・) とは
異なるので、注意してください。円記号のあとの改行文字は、スペースに置き換えられま
す。詳しくは、このファイルの「ユーザー定義マクロ」を参照してください。
コマンド行中のパーセント記号 (%) は、ファイル指定子の開始を示すものとして解釈され
ます (このファイルの「ファイル名構成要素を参照するための構文」を参照してください)。
NMAKE は、%s をファイル名として解釈し、%| に続く d, e, f, p, F の文字列をファイ
ル名またはパスの 1 部または全部と解釈します。コマンド行でパーセントをリテラル文字
として使うときは、パーセントを 2 つ (%%) 記述してください。これらの場合以外は、
NMAKE はパーセント記号 1 つをリテラル文字として解釈します。ただし、NMAKE は
つねに 2 つのパーセント記号 (%%) を 1 つのパーセント記号として解釈するため、リテ
ラル文字として %% を表したいときには、%%% とパーセント記号 3 つで記述する
か、%%%% のように 4 つ記述します。
ドル記号 ($) をコマンドでリテラル文字として使うには、ドル記号を 2 つ ($$) 記述しま
す。この方法は、^$ が有効なほかの場合にも使うことができます。
マクロ定義でのリテラル文字について詳しくは、このファイル の「マクロ定義で使われる
制御文字」を参照してください。
ワイルドカード
ターゲット ファイルや依存ファイルを指定するときに、MS-DOS のワイルドカード (* 
と ?) を使うことができます。NMAKE は、依存関係行にあるワイルドカードを展開しま
す。コマンドの中で指定されているワイルドカードは、そのコマンドに渡されます。この
ときは、NMAKE はそのワイルドカードを展開しません。

例
次に示す記述ブロックでは、ワイルドカードの * が 2 回使われています。

project.exe : *.c
	cl *.c /Feproject.exe

この例で、NMAKE は依存関係行にある *.c を展開し、カレント ディレクトリの中から
拡張子 .C を持つすべてのファイルを探し出します。ファイル .C の中に古いものがある
と、CL コマンドはファイル *.c を展開して、それらすべてのファイルをコンパイルおよ
びリンクします。
コメント
メイクファイルでは、シャープ記号 (#) のあとにコメント (注釈文) を書くことができま
す。NMAKE は、シャープ記号から改行文字の間に記述されたものを無視します。次に、
コメント記述の例を示します。

# コメント行

OPTIONS = /MAP  # マクロ定義行

all.exe : one.obj two.obj  # 依存関係行
	link one.obj two.obj;
# コマンド記述ブロックの間の行
	copy one.exe ・release

obj.exe:  # 推論規則記述行

コマンド ラインには、コメントを記述することはできません。依存関係行や推論規則を定
義している行と同じ行にコマンドを記述したときも同様に、コメントは記述できません。
ただし、コマンド記述ブロックの行の間にはコメントを記述できます。そのときは、行の
先頭をシャープ記号 # で始まるようにする必要があります。
リテラル文字として シャープ記号 # を使うときは、次に示すようにカレット (^) を前に
置いてください。

DEF = ^#define  #Macro representing a C preprocessing directive

TOOLS.INI ファイルでもコメントを記述できます。TOOLS.INI では、コロン (;) を使
ってコメントを記述することもできます。このファイルの「TOOLS.INI ファイル」を参
照してください。
長いファイル名
使っているファイル システムで長いファイル名がサポートされているときには、その名前
を使うことができます。ただし、そのときはダブル クォーテーション (") でそのファイル
名を囲む必要があります。次に、依存関係行での例を示します。

all : "VeryLongFileName.exe"

記述ブロック
記述ブロックはメイクファイルの中心となる部分です。以下に代表的な NMAKE 記述ブ
ロックを示します。ここでは、依存関係行、ターゲット部、依存部について順に説明して
います。

myapp.exe : myapp.obj another.obj myapp.def
    link myapp another, , NUL, mylib, myapp
    copy myapp.exe c:・project

記述ブロックは、“依存関係行”で始まります。依存関係行では、1 つ以上の“ターゲッ
ト”ファイルと 0 または 1 つ以上の“依存”ファイルを指定します。ターゲット ファイ
ルが存在しないとき、またはターゲット ファイルの最終変更日時よりも新しい依存ファイ
ルが 1 つでもあったとき、NMAKE はそのターゲットに対するコマンド記述ブロックを
実行します。コマンド記述ブロックについては、「コマンド」を参照してください。

依存関係行
記述ブロックは、“依存関係行”で始まります。依存関係行では、1 つ以上の“ターゲッ
ト”ファイルと 0 または 1 つ以上の“依存”ファイルを指定します。ターゲット ファイ
ルが存在しないとき、またはターゲット ファイルの最終変更日時よりも新しい依存ファイ
ルが 1 つでもあったとき、NMAKE はそのターゲットに対するコマンド記述ブロックを
実行します。以下に依存行の例を示します。

myapp.exe : myapp.obj another.obj myapp.def

この例では、myapp.obj、another.obj または myapp.def のいずれかが更新されると、
NMAKE は myapp.exe を再ビルドします。
依存関係行をインデントさせることはできません (依存関係行の先頭にスペースやタブを
入れないでください)。最初のターゲットを、行の先頭に指定する必要があります。ターゲ
ット部と依存部の間は、「複数の記述ブロックでのターゲットの使い方」の項での説明を
のぞき、コロン (:) で区切ります。コロンの前後にはスペースまたはタブを入れることが
できます。依存関係行は、1 行で記述する必要があります。ただし、ターゲット または依
存ファイルの後ろに円記号 (・) を付けることにより依存関係行を複数行にわたって記述
できます。
コマンドを実行する前に、NMAKE はすべての依存関係行と適切な推論規則を評価して、
ターゲット ファイルを完全に更新するのに必要なすべての順序を指定する、“依存ツリ
ー”を作ります。NMAKE は、依存ファイル自体がほかの記述ブロックの依存関係行でタ
ーゲット ファイルとして指定されていたり、その依存関係行の依存ファイルが別の場所で
ターゲットになっているかをチェックします。そのあとに NMAKE は、依存ツリーを作
り、最終変更日時をチェックします。依存ツリーの中にターゲット ファイルよりも新しい
依存ファイルがあるときには、NMAKE は必要なファイルを更新してからターゲットをビ
ルドします。
ターゲット部
依存関係行のターゲット部には、1 つ以上のターゲット ファイル名を指定します。少なく
とも 1 つのターゲット ファイルを指定する必要があります。複数指定するときは、ファ
イル名を 1 個以上のスペースまたはタブで区切ってください。ファイル名は、ディレクト
リ パスを付けて指定できます。ファイル名は、大文字小文字の区別がありません。ターゲ
ットは、パスを含めて 256 文字以内で指定する必要があります。
コロン (:) の前の最後のターゲット ファイル名が、1 文字のときは、必ずコロンの前にス
ペースを入れてください。スペースがないと、NMAKE はこのコロンをドライブ指定子で
あると判断します。
通常、ターゲット部には記述ブロックのコマンドを使ってビルドするファイルの名前を指
定しますが、有効なファイル名であればどのファイルでも指定できます。また、疑似ター
ゲットをターゲットとして指定することもできます。詳しくは、このファイルの「疑似タ
ーゲット」の項を参照してください。
NMAKE のコマンド ラインでターゲット ファイルが指定されると、NMAKE はそのタ
ーゲットをビルドします。コマンド ラインでターゲット ファイルが指定されなかったと
きには、NMAKE はメイクファイルの最初の依存関係行の先頭に指定されているターゲッ
トをビルドします。
以前の例では、1 つのターゲット ファイル MYAPP.EXE が指定され、このターゲットが
存在しないときや更新が必要なときは、ビルドするように NMAKE に指示しています。
複数の記述ブロックでのターゲットの使い方
以前の例のようにに指定したときは、ターゲットは 1 つの記述ブロックにだけあります。
複数の記述ブロックを使ってターゲットを更新するには、ターゲット部と依存部との間を 
2 つのコロン (::) で区切ります。この機能は、べつべつのコマンドによって生成された要
素を含む複雑なターゲット ファイルをビルドするときに有効です。

例
次に示すメイクファイルでは、ライブラリを更新します。

target.lib :: one.asm two.asm three.asm
	ML one.asm two.asm three.asm
	LIB target -+one.obj -+two.obj -+three.obj;
target.lib :: four.c five.c
	CL /c four.c five.c
	LIB target -+four.obj -+five.obj;

この例では、アセンブリ言語のファイルが 1 つでもライブラリよりもあとに変更されると、
NMAKE はソース ファイルをアセンブルして、ライブラリを更新します。同様に、C 言
語のファイルが 1 つでも変更されると、NMAKE は C のファイルをコンパイルして、
ライブラリを更新します。
複数の依存関係行でのターゲットの重複
1 つの記述ブロックで同じターゲットが複数の依存関係行を使って指定されているとき、
その依存関係行は 1 行の依存関係行のように扱われます。たとえば、次のように指定した
とします。

bounce.exe : jump.obj
bounce.exe : up.obj
	echo Building bounce.exe...

この例は、次のように指定したときと同じ結果になります。

bounce.exe : jump.obj up.obj
	echo Building bounce.exe...

このような評価方法が行われるためにいくつかの影響があります。NMAKE は 1 回につ
き 1 つのターゲットを元にして依存ツリーを作るため、次のように別のターゲットが含ま
れてしまうことがあります。

bounce.exe leap.exe : jump.obj 
bounce.exe climb.exe : up.obj
	echo Building bounce.exe...

この例で、NMAKE は 3 つのターゲットそれぞれについて、別々の記述ブロックで指定
されているように依存関係行を評価します。bounce.exe または climb.exe を更新する必
要があるとき、NMAKE は指定されたコマンドを実行します。leap.exe を更新する必要が
あるときは、指定されたコマンドは実行されず、NMAKE は推論規則の適用を試みます。
メイクファイルの中の異なる依存関係行で同じターゲットを指定するときには、注意が必
要になります。同じターゲットが、メイクファイルの異なる場所の 1 つのコロン (:) で区
切られている 2 つの依存関係行で指定されていて、しかもコマンドがそのうちの 1 つの
依存関係行のあとにだけ指定されているとき、NMAKE はその 2 つの依存関係行が隣接
または結合されているように扱います。このような場合、NMAKE はコマンドの指定がな
い依存関係行に対して推論規則を実行しません (「推論規則」を参照してください)。
NMAKE は その依存関係行が 1 つの記述ブロックに属していると見なし、一方の依存関
係行で指定されているコマンドを実行します。
次に示すメイクファイルは、前の例と同じように解釈されます。

bounce.exe : jump.obj
	echo Building bounce.exe...
Technical Details
Message-ID: <NEWTNews.814818842.31891.test3@japan4.netmanage.com>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: fe8aa,cfae1401c22d8295,start
X-Google-Attributes: gidfe8aa,public
From: test3@japan4.netmanage.com
Subject: test-ignore93kをもう一度
Date: 1995/10/27
Message-ID: <NEWTNews.814818842.31891.test3@japan4.netmanage.com>
X-Deja-AN: 118216285
organization: PSI Public Usenet Link
content-type: TEXT/PLAIN; charset=ISO-2022-JP
mime-version: 1.0
newsgroups: ca.test