このファイルはSunOS4.1.3-JLE1.1.3の日本語manページを 坂本が個人的にhtml用に整形したものです。



日本語SunOS4.1           1991年11月11日                         1
MAKE(1)                 ユーザ・コマンド                  MAKE(1)



【名前】
     make - 関連するプログラムおよびファイルの維持、更新、およ び
     再作成

【形式】
     make [ -f makefile ] ...  [ -d ] [ -dd ] [ -D ] [ -DD ]
          [ -e ] [ -i ] [ -k ] [ -n ] [ -p ] [ -P ] [ -q ] [ -r ]
          [ -s ] [ -S ] [ -t ] [ target ...  ]
          [ macro=value ...  ]

【国際機能】
     make は EUC 主および補助コードセットの文字を含むファイ ル と
     ファイル名を扱うことができます。バイト単位ではなく、文字単位
     のパターンマッチングを行なうことができ、複数バイト文字を扱う
     ことができます。

     主および補助コードセットからの EUC 文字を含む文字列コマン ド
     行で使用することができます。また、マクロ名としても使えます。
     特種文字 ( % や $ 等 ) は主コードセットの文字でなければい け
     ません。

  [環境]
     環境変数 LC_CTYPE, LANG, LC_default は、 make の文字分類を制
     御 し ます。 make を起動すると、これらの環境変数は LC_CTYPE,
     LANG, LC_default の順にチェックされます。有効な値が検出さ れ
     ると、文字分類の残りの環境変数は無視されます。たとえば、LANG
     を新しく設定しても LC_CTYPE の現在有効な文字分類に上書きする
     こ と はありません。有効な値がない場合、シェルの文字分類はデ
     フォルトで POSIX.1 の C の locale に設定されます。

【機能説明】
     make は各 target と関連する一連のシェルコマンドを実行し、 通
     常、 同 じ 名 前 の フ ァ イルを作成するかまたは更新します。
     makefile は、あるターゲットを、それぞれが依存してい る 他 の
     ファイルに対応して最新の状態になるよう更新する方法を指定する
     エントリを含んでいます。これらの「他のファイル」を依存ファイ
     ル と 呼びます。各々の依存ファイルはそれ自体もターゲットなの
     で、自分自身の依存ファイルを持っている場合もあります。

     ツリー構造は、ターゲット、依存ファイル、さらにそれの依存ファ
     イルから構成され、 make は、 target を再作成するかどうかを決
     定するときにこのツリー構造を調べます。 make は、開始エントリ
     が コ マンド行に指定されていなければ、 makefile の最初のター
     ゲット・エントリから、依存ファイルと各ターゲットを再帰的に突
     き 合 わせて調べます。すべての依存ファイルを処理した後、ター
     ゲット・ファイルが存在しないか、依存ファイルのいずれかよりも
     古い場合は、 make はターゲットを再作成します。このバージョン
     ではオプションとして、ターゲットを作成するために使用したコマ
     ンドが変更された場合は、そのターゲットはもはや古いものとみな
     します。

     任意のターゲットを作成するため、 make はコマンド・リストを実
     行 し ます。このコマンド・リストを規則といいます。この規則は
     ターゲットの makefile エントリに明示的に指定するか、 make に
     よって暗に指定することもできます。

     -f オプションつきの makefile が指定されない場合:

          o  makefile に対する SCCS 履歴ファイルがある場合、 make
             はそのファイルの最新バージョンを取り出し、読み取ろう
             とします。現在のディレクトリにファイル makefile があ
             る場合、 make はそのファイルを読み取ろうとします。

          o  Makefile に対する SCCS 履歴ファイルがある場合、 make
             はそのファイルの最新バージョンを取り出し、読み取ろう
             とします。現在のディレクトリにファイル Makefile があ
             る場合、 make はそのファイルを読み取ろうとします。

     コマンド行に target が指定されていな い 場 合 は、  make  は
     makefile に定義されている最初のターゲットを使用します。

     target が makefile エントリを持たない場合、またはエントリ が
     規則を持たない場合は、 make は次の方法により順次規則を取り出
     し、適切な規則を探します。(各方法については下記の使用法の 項
     で説明します。)

          o  パターン・マッチング規則

          o  ユーザ指定の makefile から読み取った暗黙の規則

          o  通常、ファイル  から読み取った暗 黙
             の標準規則(サフィクス規則ともいう)

          o  SCCS 取り出し。 make は、 SCSS 履歴ファイルが存在 す
             れば、そのファイルから最新バージョンを取り出します。
             詳細については特殊関数ターゲット 'SCCS_GET:' の説 明
             を参照してください。

          o  makefile に '.DEFAULT:' ターゲット・エントリがある場
             合、そのエントリからの規則。

     target の makefile エントリがない場合、作成するための規則 が
     ない場合、およびその名前を持つファイルがない場合は、 make は
     エラー・メッセージを出し、停止します。

【オプション】
     -f makefile
          記述ファイル makefile を使用します。ファイル名が '-' の
          場 合は、標準入力を使用します。 makefile がある場合は、
          その内容は暗黙の規則と定義済みマクロよりも優先 さ れ ま
          す。複数の -f makefile 引数を指定すると、 make はこれら
          のファイルの連結したものを指定された順序で使用します。

     -d   make がターゲットを再作成する理由を表示します。 make は
          新 しい依存ファイルを表示します。さらに、 make は環境変
          数 MAKEFLAGS から読み取られたオプションを表示します。

     -dd  依存ファイルのチェックおよび処理を詳細に表示します。

     -D   読み取られた makefile のテキストを表示します。

     -DD  makefile 、 default.mk ファイル、状態ファイルおよびすべ
          ての隠された依存ファイルの報告のテキストを表示します。

     -e   環境変数が makefile 内の指定に代わり有効となります。

     -i   コマンドから返されるエラー・コードを無視します。特殊 関
          数ターゲット `.IGNORE:' と同じ作用です。

     -k   コマンドによりゼロ以外のエラー状態が戻されたとき、現 在
          の ターゲットを放棄しますが、そのターゲットに依存しない
          他のブランチに関する作業は継続します。

     -n   非実行モード。コマンドを出力しますが、実行はしませ ん。
          @  で 始 ま る 行 も 出力されます。ただし、コマンド行に
          $(MAKE) マクロへの参照を含む場合は、その行は必ず実行 さ
          れます(「  makefile の読み込みと環境」の項を参照)。

     -p   マクロ定義およびターゲットの記述を全部出力します。

     -P   依存ファイルを再帰的に報告し、ターゲットを作成するこ と
          なく、依存階層全体を示します。

     -q   問い合わせモード。 make コマンドは、ターゲット・ファ イ
          ル が最新のときはゼロ、最新でないときはゼロ以外のステー
          タス・コードを返します。

     -r   省略時のファイルを読み込みません。

     -s   サイレント・モード。実行前にコマンド行を出力しないよ う
          にします。特殊関数ターゲット `SILENT:' と同じ作用です。

     -S   -k オプションの効果を取り消します。ゼロ以外の終了状態が
          コマンドから返された場合は、処理を中止します。

     -t   規則を実行する代わりにターゲット・ファイルにタッチし ま
          す( 更新します)。これは、複数の人がファイルを保守する場
          合は危険です。ターゲット KEEP_STATE: が makefile にある
          場 合は、このオプションは、規則が実行された場合と同じよ
          うに状態ファイルを更新します。

     macro=value
          マクロ定義。この定義は make の呼び出し時は固定されて い
          ま す。 makefile または環境内の指定されたマクロの定義に
          代わって有効となります。ただし、この定義はさらに条件 付
          き マクロ代入およびターゲット・エントリ内の遅延マクロ定
          義によっても置き換えられます。

【使用法】
     make の詳細については、 SunOS_入_門II
     Programming Utilities and Libraries を参照してください。

  [makefile の読み込みと環境]
     make を最初に起動すると、環境変数 MAKEFLAGS を読み込 み、 (1
     文 字)フラグ・オプションのリストを得ます。次いで有効な追加の
     オプションもコマンド行から読み込みます。

     次に、 make は定義済みマクロ、暗黙の規則のターゲット・エント
     リ、および SCCS ファイルを取り出すための規則などの追加の規則
     を含む省略時の makefile を読み取ります。 make は現在のディレ
     ク ト リ内のファイル default.mk が存在すれば、それを使用しま
     す。 な け れ ば、 標 準 定 義 と 規 則 を 含 む ファ イ  ル
     /usr/include/make/default.mk  を読み取ります。これらを含める
     に は ロー カ ル の  default.mk  ファ イ  ル  の  指  示  子
     include/usr/include/make/default.mk を使用します。

     次に、 make は環境から変数をインポートし( -e オプションが 有
     効 でなければ)、定義済みマクロとして扱います。 make は、最新
     の定義を使用するので、 makefile のマクロ定義が同じ名前を持つ
     環境変数よりも優先されます。ただし、 -e オプションが有効であ
     る場合は、すべての makefile を読んだ後に環境変数を読み取りま
     す。この場合、環境変数が makefile の定義よりも優先されます。

     次いで、 make はローカル・ディレク ト リ に 状 態 ファ イ ル
     .make.state があればそれを読み取ります。次に -f オプションで
     指定した makefile か、または上記の makefile または  Makefile
     を読み取ります。

     最後に、 make は、 ( -e オプションが有効な場合、環境を 読 み
     取っ てから)コマンド行からマクロ定義を読み取ります。このマク
     ロ定義は、 makefile および環境のマクロ定義にとって代わ り ま
     す。 た だ し、 ネ ス トした make コマンドによって使用される
     makefile にマクロ定義がある場合は、 -e オプションが有効で な
     い 限り、makefile のマクロ定義が有効となります。 -e オプショ
     ンが有効な場合は、ネストした make は、コマンド行に設定した値
     を使用します。

     make は、環境変数を、呼び出した各コマンドまたはシェルにエ ク
     スポートします。 makefile に定義されたマクロはエクスポートし
     ません。環境変数が設定されていて、同じ名前のマクロがコマンド
     行にも定義されている場合は、 make は、コマンド行に定義されて
     いる値をエクスポートします。 -e オプションが有効でない限り、
     makefile  のマクロ定義が、環境からインポートされたマクロ定義
     よりも優先されます。

     マクロ MAKEFLAGS, MAKE および SHELL は、特別な場合です。詳細
     については、「特殊マクロ」の項を参照してください。

  [makefile ターゲット・エントリ]
     ターゲット・エントリの書式は、次のとおりです。

          target...  [:|::] [dependency] ...  [; command] ...
               [command]
               ...

     最初の行にはターゲットの名前(またはスペースで区 切っ た ター
     ゲッ ト の リスト)を含み、 1 つまたは 2 つのコロンで終わりま
     す。この後に依存ファイルまたは依存ファイルのリストを指定する
     こ と ができます。依存ファイルのリストは make は順次検査しま
     す。依存ファイルのリストは、セミコロンで終わらせること が で
     き、 そ の後にボーン・シェル・コマンドを指定することができま
     す。ターゲット・エントリの以降の行は、タブで始まり、 ボー ン
     ・シェル・コマンドを含みます。これらのコマンドは、ターゲット
     を作成する規則を構成します。

     シェル・コマンドは、復帰改行文字をバックスラッシュ( \ )で エ
     スケープすることにより複数の入力行に続けることができます。継
     続行もタブで始まらなければなりません。

     ターゲットを再作成するため、 make はマクロを拡張し、各行の冒
     頭 のタブ文字を削除し、コマンドを直接実行するか(シェル・メタ
     キャラクタを含まない場合)、または各コマンド行をボーン ・シェ
     ルに渡し、実行します。

     タブまたは # で始まらない最初の行は、他のターゲットか、ま た
     はマクロ定義の開始を示します。

  [makefile の特殊文字]
  [Global]
     #    コメントを開始します。コメントは次の復帰改行で終わり ま
          す。コマンド行でタブの後に # がある場合は、その行がシェ
          ルに渡されます (シェルも# をコメントの始まりとして取 り
          扱います)。

     include filename
          行の最初の 7 文字が include であり、そのあとにスペー ス
          ま たはタブが続く場合は、それに続く文字列はその行で補間
          するためのファイル名と解釈されます。 include ファ イ ル
          は、約 16 レベルまでネストすることができます。

  [_タ_ー_ゲ_ッ_ト_お_よ_び_依_存_フ_ァ_イ_ル]
     :    ターゲット・リストの終了子。コロンに続くワードは、 ター
          ゲッ トの依存ファイルのリストに追加されます。コロンで終
          了した複数のエントリにターゲットが指定されてい る 場 合
          は、 そのすべてのエントリの依存ファイルはターゲットの完
          全な依存ファイルのリストを作成するように追加されます。

     ::   代替依存ファイルの終了子。 : の代わりに使用すると、  ::
          は、 代替依存ファイルに対してターゲットを検査し、更新し
          ます。ターゲットがエントリに記載されている依存ファイ ル
          よ り古い場合は、そのエントリの規則にしたがってターゲッ
          トが作成されます。代替エントリの依存ファイルより古い 場
          合 は、代替エントリの規則にしたがって作成されます。暗黙
          の規則は、 :: で終了するターゲットに適用されません。 し
          た がっ て 各エントリに対して規則を指定する必要がありま
          す。依存ファイルを指定しないと、その規則が実行 さ れ ま
          す。

     target [+ target...] :
          ターゲット・グループ。ターゲット・エントリの規則は指 定
          さ れたすべてのターゲットをグループとして作成します。通
          常 make を実行するたびに 1 回だけ実行されますが、グルー
          プ に属するターゲットが依存ファイル検索で見つかるたびに
          グループ内にコマンド依存ファイルがあるか否かが検査さ れ
          ます。

     %    パターン・マッチング規則のワイルドカード文 字。 シェ ル
          ・ワ イルドカード * と同様に、 % はターゲットと依存ファ
          イル名にある 0 個以上の文字列と一致します。詳細について
          は、 後述の「パターン・マッチング規則」を参照してくださ
          い。

     ./pathname
          make はターゲットからパス名として渡される名前が `./' で
          始まる文字を( "ピリオド"は現在作業中のディレクトリと相
          対的なので)無視します。

  [マクロ]
     =    マクロ定義。この文字の左側のワードはマクロ名です。右 側
          のワードは値を示します。 = と値の最初のワードの間の空白
          は無視されます。 = の後のワードの区切りがあるものとみな
          されます。後の空白は値の一部となります。

     $    マクロ参照。次の文字または丸かっこまたは中かっこで囲 ん
          だ 文字列はマクロ参照として解釈されます。 make は参照(
          $ を含む)をマクロの値に置き換えることによって変換し ま
          す。

     ( )
     { }  マクロ参照名区切り文字。 $ に付加された丸かっこまたは中
          かっ こで囲んだ文字列は参照するマクロ名とみなされます。
          区切り文字を使用しないと、 make は最初の文字だけをマ ク
          ロ名と認識します。

     $$   $ マクロへの参照で、値は文字 $ です。 $ で始まる変数 式
          を シェルに渡すため、シェルによって拡張された環境変数を
          参照するため、またはターゲットが実際に処理され る ま で
          ター ゲットの依存ファイル・リスト内の動的マクロの処理を
          遅延させるために使用します。

     \$   エスケープしたドル記号文字。規則の範囲内でリテラル ・ド
          ル記号として解釈されます。

     +=   = の代わりに使用した場合、文字列をマクロ定義に追加し ま
          す( = とは異なり空白で囲まなければなりません)。

     :=   条件付きマクロ代入。これの前に、明示的なターゲット ・エ
          ン トリとともにターゲットのリストを前に指定すると、その
          後のマクロ定義は、これらのターゲットとその依存ファイ ル
          だけを処理する場合に有効となります。

     :sh =
          出力コマンドのマクロの値を定義します。(コマンド置換 参
          照)

     :sh  マクロ参照では、マクロに格納されたコマンドを実行して そ
          のコマンドの出力と置き換えます。(コマンド置換参照)

  [規則]
     -    make は最初のタブ文字以外の文字が - であるコマンド行 に
          よっ て返されるゼロ以外のエラー・コードを無視します。こ
          の文字はコマンド行の一部としてシェルに渡され ま せ ん。
          make は、 -i または -k オプションまたは .IGNORE: 特殊機
          能ターゲットが有効でないかぎり、コマンドがゼロ以外の 状
          態を返した場合は処理を終了します。

     @    タブ文字以外の最初の文字が @ である場合、 make はコマン
          ド 行 を 実行する前にその内容を出力しません。この文字は
          シェルには渡されません。

     ?    コマンド依存ファイル検査を行いません。この文字で始ま る
          コマンド行は、コマンド依存ファイル検査を行いません。

     !    コマンド依存ファイル検査を強制的に行います。通常は検 査
          を 行わないコマンド行に対しても行います。ただし、この検
          査は、動的マクロ ?(たとえば $? )への参照を含む行に は
          通常行われません。

     タブの後の最初の文字群が -, @, ?, ! の組み合わせである 場 合
     は、すべての指定が有効です。ただし、いずれもシェルには渡され
     ません。

  [特殊機能ターゲット]
     makefile に組み込んだ場合、次のターゲット名は特殊機能を実 行
     します。

     .DEFAULT:
          makefile に本エントリがある場合、このターゲットの 規 則
          は、 他のエントリ、それを作成するための規則、現在のバー
          ジョンを取り出す SCCS ヒストリ・ファイルが存在しない 場
          合 にターゲットを処理するのに使用します。 make は、この
          ターゲットの依存ファイルは無視します。

     .DONE:
          本ターゲットが makefile に定義されてい る 場 合、  make
          は、 他のターゲットを作成後、本ターゲットと元の依存ファ
          イルを処理します。

     .FAILED:
          このターゲットは makefile と make がエラーで停止した と
          きに .DONE の替わりに機能します。

     .IGNORE:
          エラーを無視します。このターゲットが makefile にある 場
          合 は、コマンドから返されるゼロ以外のエラー・コードを無
          視します。

     .INIT:
          本ターゲットが makefile に定義されている場合、他の ター
          ゲッ トを処理する前にこのターゲットと依存ファイルを作成
          します。

     .KEEP_STATE:
          このターゲットが makefile にある場合は、 make は、現 在
          のディレクトリの状態ファイル .make.state を更新します。
          このターゲットは、コマンド依存ファイルと隠し依存ファ イ
          ル検査を開始します。

     .MAKE_VERSION:
          次の形式のターゲット・エントリは、バージョン検査を許 可
          します。

               .MAKE_VERSION:  VERSION-number

          make のバージョンが指定されたバージョンと違う場 合 は、
          make は警告メッセージを出します。

     .NO_PARALLEL:
          現在このターゲットは機能していません。将来使用すると き
          のために確保してあります。

     .PARALLEL:
          現在このターゲットは機能していません。将来使用すると き
          のために確保してあります。

     .PRECIOUS: 
          削除しないファイルのリスト。 make はこのターゲットに 依
          存 す る ファイルは、割り込みが発生しても削除しません。
          make は、割り込みを受けたとき現在のターゲットを削除しま
          す。

     .SCCS_GET:
          このターゲットはヒストリ・ファイルから現在のバージョ ン
          の  SCCS ファイルを取り出す規則を含みます。自動的に取り
          出さないようにするには、このターゲットのエントリを空 の
          規則とともに makefile に追加します。

     .SILENT:
          何も出力せずに実行します。このターゲットが makefile  に
          あ る場合、 make は、コマンドを実行する前にエコーしませ
          ん。

     .SUFFIXES:
          暗黙の規則を選択するためのサフィック ス ・リ ス ト (サ
          フィックス・リストを参照)。

     .WAIT:
          現在このターゲットは機能していません。将来使用すると き
          のために確保してあります。

  [特殊ターゲットのクリア]
     このバージョンの make の場合、依存や規則のない状態でエントリ
     することによって以下の特殊ターゲットの定義をクリアすることが
     できます。

          .DEFAULT, .SCCS_GET, .SUFFIXES

  [_コ_マ_ン_ド_依_存_フ_ァ_イ_ル]
     ターゲット .KEEP_STATE: が makefile にある場合、 make は状態
     ファ イル .make.state に対するターゲットを作成するコマンドを
     検査します。最新の make の実行後にコマンドが変更された 場 合
     は、 make はターゲットを再作成します。

  [_隠_し_依_存_フ_ァ_イ_ル]
     ターゲット .KEEP_STATE: が makefile にある場合、 make は cpp
     (1) および #include ファイルなどの「隠し」ファイルの他のコン
     パイル・プロセッサからの報告を読み取ります。ターゲットが他の
     ファイルよりも古い場合は、 make はターゲットを再作成します。

  [_マ_ク_ロ]
          macro=value

     の形のエントリがマクロ定義です。 macro は、 マ ク ロ 名 で、
     value は、注釈文字またはエスケープされていない復帰改行までの
     全文字から成る文字列です。

     以降、 $(name) または ${name} が現われると、 value で置き 換
     えられます。マクロ名が1 文字である場合は、かっこは省略できま
     す。

     マクロ定義に他のマクロへの参照を含むことができ、この場合、ネ
     ストされた参照が最初に展開されます。

  [サフィックス置換マクロ参照]
     マクロ内の置換は次のように行うことができます。

          $(name:string1=string2)

     string1 はサフィックスまたはマクロ定義で置換するワー ド で、
     string2 は置換サフィックスまたはワードです。マクロ値のワード
     はスペース、タブ、およびエスケープされた復帰改行文字で区切り
     ます。

  [パターン置換マクロ参照]
     パターン・マッチング置換はマクロに適用することもでき、参照形
     式は次のとおりです。

          $(name: op%os= np%ns)

     op は既存の(古い)プレフィックスで、 os は既存の(古い) サ
     フィックス、 np および ns はそれぞれ新しいプレフィックスおよ
     びサフィックスを示します。 % (0 個以上の文字からな る 文 字
     列)と一致したパターンは置換される値からくり上げられます。た
     とえば
          PROGRAM=fabricate
          DEBUG= $(PROGRAM:%=tmp/%-g)

     は、 DEBUG の値を tmp/fabricate-g に設定します。

     注: パターン置換マクロ参照は、パターン・マッチング規則の依存
     行 に使用することはできません。 % 文字は単独では評価されませ
     ん。また、 % のメタキャラクタがいくつあってもイコール記号 の
     あとに表示されます。

  [マクロへの追加]
     ワードを次のようにマクロ値に追加することができます。

          macro += word...

  [特殊目的のマクロ]
     環境に変数 MAKEFLAGS が指定されている場合、 make はコマン ド
     行から入力したオプションとともに、変数からフラグ(1 文字)オ
     プションを取り出します。 make はこれらのオプションを組み合わ
     せ た値を MAKEFLAGS マクロとして保持し、各コマンドまたはそれ
     が呼び出したシェルに自動的にエクスポートします。

     注: MAKEFLAGS で渡されたフラグは、 -d または -dd オプショ ン
     が有効な場合のみ表示されます。

     MAKE マクロもまた他の特殊な場合です。省略時には値 make を 持
     ち、 参 照される行に対する -n オプションを一時的に無効にしま
     す。これにより make のネストされた次のような呼び出しを

          $(MAKE) ...

     再起的に実行することができます。この時、 -n フラグは make 以
     外 のすべてのコマンドに対して有効です。このため `make -n' を
     使用することにより makefile の階層全体を検査することができま
     す。

     4.2BSD make との互換性を保つために MFLAGS マクロは、 - を 前
     に 付 けることにより変数 MAKEFLAGS から設定されます。 MFLAGS
     マクロは、自動的にエクスポートされません。

     SHELL マクロは /usr/bin/csh などの1 ワードの値に設定された場
     合、 使 用 する代替シェルの名前を示します。注: make はシェル
     ・メタキャラクタを含まないコマンドを直接実行します。 C  シェ
     ルの dirs などの組み込みコマンドは、コマンド行にメタキャラク
     タ(セミコロンなど)が含まれていなければ認識されません。この
     マクロは -e の指定に拘わらず環境からインポートされたり、エク
     スポートされたりしません。正しく設定するには、このマクロを必
     要な makefile 全部に定義しなければなりません。

     KEEP_STATE 環境変数は .KEEP_STATE: 特殊機能ターゲットと同 じ
     効果を持ち、コマンド依存ファイルを、隠し依存ファイルを、そし
     て状態ファイルの書き込みを有効とします。

     以下のマクロはクロス・コンパイレーションの際に提供されます。

     HOST_ARCH
          ホスト・システムのマシン構造。ディフォルトでは `-' で導
          かれる arch(1) コマンドの出力です。

     TARGET_ARCH
          ターゲット・システムのマシン構造。ディフォルトでは  `-'
          で導かれる arch(1) コマンドの出力です。

     HOST_MACH
          ホスト・システムのマシン構造。ディフォルトでは `-' で導
          かれる mach(1) コマンドの出力です。

     TARGET_MACH
          ターゲット・システムのマシン構造。ディフォルトでは  `-'
          で導かれる arch(1) コマンドの出力です。

  [動的マクロ]
     動的に維持されるマクロが幾つか用意されており、規則の中で省略
     形として使用すると便利です。ここでは参照として示しますが、明
     示的に定義しないのが最善です。

     $*   暗黙の規則とともに使用するために選択された場合に得ら れ
          る、 現在のターゲットのベース名。パターン・マッチングの
          規則の場合は、値は % と対応する文字列です。

     $<   暗黙の規則とともに使用するために選択された場合に得ら れ
          る、依存ファイルの名前

     $@   現在のターゲット名

     $?   暗黙の規則とともに使用するために選択された場合に得ら れ
          る、 ターゲットよりも新しい依存ファイルのリスト。コマン
          ド依存ファイル検査は、コマンドのプレフィックスが  ?  で
          あっ た 場 合と同様に、このマクロを含む行では行われませ
          ん。 ? の詳細は上記の「makefile の特殊文字」の項を参 照
          してください。コマンド行プレフィックス ! を指定してこの
          検査を強行することができます。

     $%   処理されているライブラリ要素の名前。詳細は、「ライブ ラ
          リの維持」の項を参照してください。

     依存ファイル・リスト内の動的マクロを参照するには、さら に  $
     文 字を参照の前に付けます(たとえば $$< )。 make は暗黙の規
     則と同様に $< および $* を代入する(サフィックス・リストおよ
     び ディ レクトリの内容にしたがって)ため、明示的なターゲット
     ・エントリに使用すると信頼性がなくなります。

     $?  以外のマクロは、大文字の F または D を追加し、かっこまた
     は中かっこで囲むことによりマクロが示す文字列のファイル名また
     はディレクトリの部分に適用するように変更できます。し た がっ
     て、  $(@D)  は 文字列 $@ のディレクトリの部分を参照します。
     ディレクトリの部分がないと、. が割り当てられます。 $(@F)  は
     文字列 $@ のファイル名の部分を参照します。

  [条件付きマクロ定義]
     マクロを定義する次の形式、

          target-list := macro = value

     は、依存ファイルにリストされているターゲットをプロセスする際
     に 使 用するもので macro は、あたえられた value に設定されま
     す。条件付きマクロが依存リストに参照される場合、 $ は遅延 さ
     せなければならないことに注意してください(替わりに $$ を使用
     してください)。また、 target-list は、 % のパターンをもつこ
     とができますが、その場合マクロはパターンにマッチするすべての
     ターゲットに条件付きで定義されます。パターン置 換 参 照 は、
     value で使用することができます。

     次の条件定義の形式を使うことによって、マクロの値を一時的に変
     更することができます。

          target-list := macro += value

  [定義済みマクロ]
     make はコンパイラとそのオプション、ホスト・アーキテク チャ、
     お よ び他のコマンドのための次の表に示すマクロを用意していま
     す。これらのマクロが環境変数として読み込まれないと、その値は
     make によってエクスポートされません。

     環境中にあるこれらのマクロのいずれかを指定して make を実行す
     るのであれば、各マクロがどの値をとることになるのかを示すため
     の注釈を付けるとよいでしょう。

     -r が有効な場合、 make はこれらのマクロ定義を提供しません。

                    定義済みマクロの一覧表

     用途           マクロ         省略時値

     ライブラリ     AR        ar
     アーカイブ     ARFLAGS   rv

     アセンブラ     AS        as
     コマンド       ASFLAGS
                    COMPILE.s $(AS) $(ASFLAGS) $(TARGET_MACH)
                    COMPILE.S $(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_MACH) -c

     C コンパイラ   CC        cc
     コマンド       CFLAGS
                    CPPFLAGS
                    COMPILE.c $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
                    LINK.c    $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)

     FORTRAN 77     FC        f77
     コンパイラ     FFLAGS
     コマンド       COMPILE.f $(FC) $(FFLAGS) $(TARGET_ARCH) -c
                    LINK.f    $(FC) $(FFLAGS) $(TARGET_ARCH) $(LDFLAGS)
                    COMPILE.F $(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
                    LINK.F    $(FC) $(FFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)

     リンク・エディタ    LD        ld
     コマンド       LDFLAGS

     lex            LEX       lex
     コマンド       LFLAGS
                    LEX.I     $(LEX) $(LFLAGS) -t

     lint           LINT      lint
     コマンド       LINTFLAGS
                    LINT.c    $(LINT) $(LINTFLAGS) $(CPPFLAGS) $(TARGET_ARCH)

     Modula2        M2C       m2c
     コマンド       M2FLAGS
                    MODFLAGS
                    DEFLAGS
                    COMPILE.def    $(M2C) $(M2FLAGS) $(DEFFLAGS) $(TARGET_ARCH)
                    COMPILE.mod    $(M2C) $(M2FLAGS) $(MODFLAGS) $(TARGET_ARCH)

     Pascal         PC        pc
     コンパイラ     PFLAGS
     コマンド       COMPILE.p $(PC) $(PFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
                    LINK.p    $(PC) $(PFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)

     Ratfor         RFLAGS
     コンパイラ     COMPILE.r $(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -c
     コマンド       LINK.r    $(FC) $(FFLAGS) $(RFLAGS)  $(TARGET_ARCH) $(LDFLAGS)

     rm             RM        rm -f
     コマンド

     yacc           YACC      yacc
     コマンド       YFLAGS
                    YACC.y    $(YACC) $(YFLAGS)

     サフィックス   SUFFIXES  .o .c .c~.s .s~.S .S~ .ln .f .f~ .F .F~ .l
     リスト                   .l~ .mod .mod~ .sym .def .def~ .p .p~ .r .r~
                              .y .y~ .h .h~ .sh .sh~ .cps .cps~

  [暗黙の規則]
     ターゲットが makefile にエントリを持たない場合、 make はその
     クラスを決定し、そのクラスに対する規則を適用しようとします。
     暗黙の規則は、対応する依存ファイルから任意のクラスのターゲッ
     トを作成する方法を記述しています。ターゲットのクラスはパター
     ンまたはサフィックスによって決まります。また、ターゲットを作
     成するための依存ファイル(同じベース名を持つ)がなければなり
     ません。定義された暗黙の規則以外に、 make はユーザ自身の暗黙
     の規則をパターンまたはサフィックスによって定義することもでき
     ます。

  [パターン・マッチング規則]
     ターゲット・エントリの形式は次のとおりです。

          Tp%Ts: Dp%Ds
               rule

     Tp はターゲット・プレフィックス、 Ts はターゲット・サ フィッ
     クス、 Dp は依存ファイル・プレフィックス、 Ds は依存ファイル
     ・サフィックスです(いずれもヌルで構いませ ん)。 パ ター ン
     ・マッ チング規則では % はファイル名と依存ファイルの両方と一
     致する 0 個以上の文字からなるベース名です。 make が暗黙の 規
     則をサーチして一致が見つかると、そのターゲット・エントリの規
     則を使って依存ファイルからターゲットを作成します。暗黙のパタ
     ーン・マッチング規則では、動的マクロ $@ および $< をターゲッ
     トと依存ファイル名の placeholder として使用します。動的マ ク
     ロ $* はワイルドカード % と一致する文字列に設定されます。

  [サフィックス規則]
     パターン・マッチング規則が適用されない場合、 make はターゲッ
     ト名を調べ、既存のサフィックス・リストにサフィックスがあるか
     どうかを調べます。あれば、サフィックス規則とそれにしたがって
     作 成 する、同じルートと他の認識されたサフィックスを持つ依存
     ファイルを探します。

          標準の暗黙の(サフィックス)規則の一覧表

     用途           暗黙の規則名   コマンド行

     アセンブリ     .s.o      $(COMPILE.s) -o  $@ $<
     ファイル       .s.a      $(COMPILE.s) -o  $% $<
                              $(AR) ARFLAGS)  $@$%
                              $(RM)  $%
                    .S.o      $(COMPILE.S) -o  $@ $<
                    .S.a      $(COMPILE.S) -o  $@ $<
                              $(AR) ARFLAGS)  $@$%
                              $(RM)  $%

     C              .c        $(LINK.c) -o  $@ $< $(LDLIBS)
     ファイル       .c.ln     $(LINT.c)  $(OUTPUT_OPTION) -i $<
                    .c.o      $(COMPILE.c)  $(OUTPUT_OPTION)  $<
                    .c.a      $(COMPILE.c) -o  $% $<
                              $(AR)  $(ARFLAGS)  $@$%
                              $(RM) $%

     FORTRAN 77     .f        $(LINK.f) -o  $@ $< $(LDLIBS)
     ファイル       .f.o      $(COMPILE.f)  $(OUTPUT_OPTION)  $<
                    .f.a      $(COMPILE.f) -o  $% $<
                              $(AR)  $(ARFLAGS)   $@$%
                              $(RM)  $%
                    .F        $(LINK.F) -o  $@ $< $(LDLIBS)
                    .F.o      $(COMPILE.F)  $(OUTPUT_OPTION)  $<
                    .F.a      $(COMPILE.F) -o  $% $<
                              $(AR)  $(ARFLAGS)   $@$%
                              $(RM)  $%

     lex            .l        $(RM)  $*.c
     ファイル                 $(LEX.l)  $< > $*.c
                              $(LINK.c) -o  $@ $*.c $(LDLIBS)
                              $(RM)  $*.c
                    .l.c      $(RM)  $@
                              $(LEX.l)  $< > $@
                    .l.ln     $(RM)  $*.c
                              $(LEX.l)  $< > $*.c
                              $(LINT.c) -o  $@ -i $*.c
                              $(RM)  $*.c
                    .l.o      $(RM)  $*.c
                              $(LEX.l)  $< > $*.c
                              $(COMPILE.c) -o   $@ $*.c
                              $(RM)  $*.c

     Modula 2       .mod      $(COMPILE.mod) -o  $@ -e $@ $<
     ファイル       .mod.o    $(COMPILE.mod) -o  $@ $<
                    .def.sym  $(COMPILE.def) -o  $@ $<

     NeWS           .cps.h    cps $*.cps
     Pascal         .p        $(LINK.p) -o  $@ $< $(LDLIBS)
     ファイル       .p.o      $(COMPILE.p)  $(OUTPUT_OPTION)  $<

     Ratfor         .r        $(LINK.r) -o  $@ $< $(LDLIBS)
     ファイル       .r.o      $(COMPILE.r)  $(OUTPUT_OPTION)  $<
                    .r.a      $(COMPILE.r) -o  $% $<
                              $(AR)  $(ARFLAGS)  $@$%
                              $(RM)

     シェル         .sh       cat $< >$@
     スクリプト               chmod +x$@

     yacc           .y        $(YACC.y)  $<
     ファイル                 $(LINK.c) -o  $@ y.tab.c $(LDLIBS)
                              $(RM) y.tab.c
                    .y.c      $(YACC.y)  $<
                              mv y.tab.c $@
                    .y.ln     $(YACC.y)  $<
                              $(LINT.c) -o $@ -i y.tab.c
                              $(RM) y.tab.c
                    .y.o      $(YACC.y)  $<
                              $(COMPILE.c) -o $@  y.tab.c
                              $(RM) y.tab.c

     サフィックス規則のターゲット・エントリの形式は次のとお り で
     す。

          DsTs:
               rule

     Ts はターゲットのサフィックス、 Ds は依存ファイルのサ フィッ
     ク ス、 rule はこのクラスのターゲットを作成する規則です。 Ds
     と Ts はサフィックス・リストになければなりません。

     サフィックスを1 つだけ持つサフィックス規則は、指定され た サ
     フィックスを持つ依存ファイルからヌル(またはゼロ)のサフィッ
     クスを持つターゲットを作成する方法を記述します。たと え ば、
     .c 規則を使用して C ソース・ファイル file.c から実行プログラ
     ム file を作成することができます。

     -r が有効でない場合、またはそれを含まないローカル・ディレ ク
     ト リ に  default.mk  ファイルがない場合、 make は、ファイル
     /usr/include/make/default.mk から暗黙の規則の標準的な集合 を
     読み取ります。

  [サフィックスのリスト]
     サフィックスのリストは、 .SUFFIXES: 特殊機能ターゲットの依存
     ファ イ ル のリストとして与えられます。省略時のリストは SUF-
     FIXES マクロに含まれます(サフィックスの標準的な集合について
     は 定 義済みマクロの一覧表を参照してください)。追加の .SUF-
     FIXES: ターゲットを定義することもできます。依存ファイルの な
     い ター ゲッ ト .SUFFIXES はサフィックスのリストをクリアしま
     す。リスト中の順序は重要です。 make はターゲットのサフィック
     スと対応する規則とリストの最初の依存ファイルのサフィックスを
     選択します。サフィックスをリストの先頭におく場合は、リストを
     クリアし、新しいサフィックスとそれに続く省略時のリストと置き
     換えます。

          .SUFFIXES:
          .SUFFIXES: suffixes $(SUFFIXES)

     チルド記号( ~ )は、指定されたサフィックスを持つ( ~ を除 い
     た 部分)依存ファイルが SCCS の下にある場合、必要であればター
     ゲットを処理する前に最新バージョンを取り出すことを示します。

  [ライブラリの維持]
     次の形式のターゲット名は、 ar (1V) ライブラリのメンバまた は
     スペースで区切られたメンバのリストを参照します。

          lib(member ...)

     対応するファイルのライブラリ・メン バ の 依 存 ファ イ ル は
     makefile  の明示的なエントリとして指定しなければなりません。
     これは次の形式のパターン・マッチング規則で扱うことがで き ま
     す。

          lib(%.s): %.s

     ここで .s はメンバのサフィックスであり、オブジェクト・ファイ
     ルの場合は通常 -o です。

     次の形式のターゲット名は、入口点 symbol を定義するラン ダ ム
     ・オブジェクト・ライブラリ( ranlib (1) )のメンバを参照しま
     す。

          lib((symbol))

  [コマンド実行]
     コマンド行は一度に1 行ずつそのプロセスまたはシェルによって実
     行 されます。 cd などのシェル・コマンドは、makefile 中のエス
     ケープされていない復帰改行まで有効となります。行は実行 前 に
     (マ ク ロ 展開の後)出力されます。ただし、行が @ で始まる場
     合、makefile に .SILENT エントリがある場合、または -s  オ プ
     ショ ン を付けて make を実行する場合は、行は出力されません。
     -n オプションは実行せずに出力だけ行うことを指定しますが、 マ
     ク ロ $(MAKE ) を含む行は常に実行され、特殊文字 @ を含む行は
     出力されます。 -t (タッチ)オプションは規則を実行せずにファ
     イルの修正時刻を更新します。ただし、これは複数のユーザがソー
     スを維持する場合には危険なことがあります。

     分岐のためにボーン・シェルの if 制御構造を使用するには、次の
     形式のコマンド行を使用します。

          if expression ; \
          then command ; \
                  ....; \
          else ; \
                  ... ; \
          fi
     複数の入力行からなりますが、エスケープされた復帰改行文字によ
     り make は各々の行をすべて1 つの(シェル)コマンド行として扱
     うことができます。

     ループのためにボーン・シェルの制御構造を使用するには、次の形
     式のコマンド行を使用します。

          for var in list ; \
               do command; \
           ... ; \
          done

     シェル変数を書き込むには、2 つの通貨記号( $$ )を使用 し ま
     す。これにより通貨記号は展開されません。

  [信号]
     キーボードから受信した INT および QUIT 信号は make  を 停 止
     し、処理中のターゲットが .PRECIOUS: の依存ファイル・リストに
     ないかぎりそのターゲット・ファイルを削除します。

【使用例】
     この makefile は pgm が 2 つのファイル a.o および b.o に依存
     し、 ま たこのファイルが共通ファイル incl.h とともに対応する
     ソース・ファイル a.c と b.c に依存することを示します。
          pgm: a.o b.o
               cc a.o b.o -o $@
          a.o: incl.h a.c
               cc -c a.c
          b.o: incl.h b.c
               cc -c b.c

     次の makefile は暗黙の規則を使用して、これと同じ依存状態を表
     現します。
          pgm: a.o b.o
               cc a.o b.o -o pgm
          a.o b.o: incl.h

【ファイル】
     makefile
     Makefile            現バージョンの make 記述ファイル
     SCCS/s.makefile
     SCCS/s.Makefile     上記の makefile の SCSS ヒストリ・ファイ
                         ル
     default.mk          ユーザが定義したターゲット、マクロ、およ
                         び暗黙の規則の省略時のファイル
     /usr/include/make/default.mk
                         標準の暗黙の規則とマクロの  makefile  (
                         default.mk がある場合は読み取りません)
     .make.state         ローカル・ディレクトリの状態ファイル
     .make.state.lock    状態ファイルに対する書き込みアクセスを制
                         御するためのロック・ファイル

【関連項目】
     ar(1V), cc(1V), cd(1), get(1), lex(1), ranlib(1), sh(1)
     SunOS_入_門II
     Programming Utilities and Libraries

【診断】
     make はエラーにより停止した場合に終了ステータス 1 を返 し ま
     す。その他の場合は、 0 を返します。

     Do not know how to make target. Stop
          target の makefile エントリがなく、 make の暗黙の規則は
          適 用 さ れ ま せん(サフィックスをもつ依存ファイルがサ
          フィックスリスト中にないか、ターゲットのサフィックス が
          リストにありません)。

     *** target removed.
          ターゲットを作成中に make が中断されました。 make  は、
          依 存ファイルよりも新しいが不完全なバージョンを残すので
          はなく、ファイル target を削除します。

     *** target  not removed.
          ターゲットを作成中に make が中断されました。ターゲッ ト
          はディレクトリにありません。

     *** target could not be removed, reason
          ターゲットを作成中に make が中断されました。示された 理
          由によりターゲットは削除しません。

     Read of include file `file' failed
          include 指示子に示された makefile が見つからないか、 ア
          クセス不能です。

     Loop detected when expanding macro value `macro'
          定義されたマクロへの参照が定義体中に見つかりました。

     Could not write state file `file'
          ターゲット .KEEP_STATE: を使用しましたが、状態ファイ ル
          に対する書き込み許可がありません。

     *** Error code n
          前のシェル・コマンドがゼロ以外のエラー・コードを返し ま
          した。

     *** signal message
          前のシェル・コマンドが信号により異常終了しました。 メッ
          セー ジ の後に -core dumped が示されている場合は、 core
          ファイルが作成されたことを示します。

【使用上の留意点】
     幾つかのコマンドは、ゼロ以外のステータスを本来返すべきでない
     のに返すことがあります。この問題を解決するには、規則中にある
     危険なコマンド行の先頭に - を付けます。

     文字 =, :, または @ を含むファイル名は無効です。

     lib(file.o) から file.o を作成することはできません。

     MAKEFLAGS で指定されたオプションは、ネストされた make コマン
     ド に対して報告されます。ネストされたコマンドが MAKEFLAGS か
     ら取り出したオプションを知るには、 -d オプションを使用 し ま
     す。

     このバージョンの make は、前のバージョンと次の点で互換性があ
     りません。

          o+  -d オプションの出力は、このバージョンでは短くなっ て
             い ます。 -dd オプションを指定すると、前のバージョン
             と同じ出力が行われます。

          o+  make は、明示的なターゲットを処理しながら、動的マ ク
             ロ $*, $<, $? の値を取り出そうとします。 make は暗黙
             の規則と同じ方法を使用するため、予期しない値となった
             り、空の値が割り当てられたりすることがあります。(こ
             れは実際には、マニュアルにその旨の記述がなかったかも
             しれませんが前のバージョンでも同じです)

          o+  make は、現在のディレクトリ内の SCCS ヒストリ ・ファ
             イルを探しません。

          o+  マクロ参照のサフィックス置換は、マクロ展開後に行われ
             ます。

     このバージョンの make で作られた makefile が旧バージョンで使
     えることは保証しません。

     現在のディレクトリに default.mk ファイルがな く、 ファ イ ル
     /usr/include/make/default.mk  もない場合は、 make はターゲッ
     トを処理する前に停止します。 make を強制的に実行するには、現
     在のディレクトリに空の default.mk ファイルを作ってください。

     依存ファイルが作成されると、 make は以降の実行中その依存ファ
     イルがあるものとみなします。規則によって後でそのファイルが削
     除され、その後のターゲットがそのファイルに依存する場合には、
     予期しないエラーが生ずることがあります。

     隠し依存ファイル検査が有効な場合、 $? マクロの値は隠し 依 存
     ファイルの名前を含みます。 $? を規則に使用した場合、コマンド
     をコンパイルするためのファイル名引数が不当になる場合がありま
     す。

     パターン置換マクロ参照は、パターン・マッチング規則の依存ファ
     イル行に使用することはできません。

     前のバージョンとは異なり、このバージョンの make では $@ 動的
     マクロの値から先行する ./ を削除します。