.\" Copyright (c) 1990, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)make.1 8.8 (Berkeley) 6/13/95 .\" %FreeBSD: src/usr.bin/make/make.1,v 1.78.2.1 2005/02/26 13:44:04 brueffer Exp % .\" .\" this file based on that translated to japanese on NetBSD Japanese Reference .\" Manual Project, and modified to fit FreeBSD Reference Manual .\" by Mochida Shuji 1996/04/26 .\" $FreeBSD$ .\" .Dd August 4, 2004 .Dt MAKE 1 .Os .Sh 名称 .Nm make .Nd プログラムの依存関係をメンテナンスする .Sh 書式 .Nm .Op Fl BPSXeiknqrstv .Op Fl C Ar directory .Op Fl D Ar variable .Op Fl d Ar flags .Op Fl E Ar variable .Op Fl f Ar makefile .Op Fl I Ar directory .Bk -words .Op Fl j Ar max_jobs .Op Fl m Ar directory .Ek .Op Fl V Ar variable .Op Ar variable Ns No = Ns Ar value .Op Ar target ... .Sh 解説 .Nm ユーティリティは、プログラムのメンテナンスを単純化するためのツールです。 その入力はファイルの生成とプログラムとの間の依存関係を指定する リストが記述されています。 カレントディレクトリまたは特別なオブジェクトディレクトリ .Pf ( Va .OBJDIR 参照) のどちらか一方において .Pa BSDmakefile , .Pa makefile , .Pa Makefile の最初に見つかった方から、この指定のリストが読み込まれます。 .Pa .depend というファイルが見つかれば、それも読み込みます .Pf ( Xr mkdep 1 を参照)。 .Pp 本マニュアルはリファレンスのためのみのドキュメントです。 .Nm と makefile に関する詳しい紹介は .%T "Make \- A Tutorial" を参照してください。 .Pp オプションは以下のとおりです。 .Bl -tag -width Ds .It Fl B シーケンス中の依存行のソースを作成するために、各コマンドに対して 1 つのシェルを実行する、バックワード互換モードで実行しようとします。 このオプションは .Fl j が使用されない限り、デフォルトで有効になります。 .It Fl C Ar directory makefile の読み取りや他のなにかをする前に、 .Ar directory へ移動します。 複数の .Fl C が指定された場合、それぞれは、直前のものに対する相対として解釈されます。 .Fl C Pa / Fl C Pa etc は .Fl C Pa /etc と等価です。 .It Fl D Ar variable 大域変数 .Ar variable を 1 と定義します。 .It Fl d Ar flags デバッグモードを有効にし、 .Nm が表示するデバッグ情報の種類を指定します。 引数 .Ar flags には、以下のうち 1 つ以上を指定できます。 .Bl -tag -width Ds .It Ar A すべてのデバッグ情報を出力します。 他のフラグをすべて指定したことと等価です。 .It Ar a アーカイブ検索とキャッシュに関する情報を表示します。 .It Ar c 条件評価に関する情報を表示します。 .It Ar d ディレクトリ検索とキャッシュに関する情報を表示します。 .It Ar f for ループの実行に関するデバッグ情報を表示します。 .It Ar "g1" 処理を行う前に、入力のグラフを表示します。 .It Ar "g2" すべての処理を行ったあと、あるいはエラーにより終了する前に入力のグラフを 表示します。 .It Ar j 複数のシェルを起動する場合の情報を表示します。 .It Ar l @ がコマンドに前置されていようといまいと、 また他の「静寂」フラグの有無に関わらず、Makefile のコマンドを表示します。 これは「やかましい」動作としても知られています。 .It Ar m ターゲットの作成と変更日付に関する情報を表示します。 .It Ar s 拡張子解釈に関する情報を表示します。 .It Ar t ターゲットリストのメンテナンスに関する情報を表示します。 .It Ar v 変数の値に関する情報を表示します。 .El .It Fl E Ar variable (存在すれば) 環境の値で上書きする、makefile の中の変数を指定します。 .It Fl e 環境の値で makefile 中のすべての変数の値を上書きするように指示します。 .It Fl f Ar makefile デフォルトの .Pa makefile と .Pa Makefile のかわりに、読み込むファイルを指定します。 もし .Ar makefile が .Sq Fl なら標準入力から読み込みます。 複数のファイルが指定可能で、指定した順に読み込まれます。 .It Fl I Ar directory makefile と、インクルードされる makefile を検索するためのディレクトリを 指定します。 システムで定義してある makefile のあるディレクトリ (または、 複数のディレクトリ; .Fl m オプションを参照) は自動的にリストに含まれ、検索されます。 .It Fl i makefile から実行されたシェルコマンドが 0 でない終了ステータスを 返しても無視します。 makefile 中でコマンドの先頭に .Sq Ic \- を指定するのと同じです。 .It Fl j Ar max_jobs .Nm が同時に起動できるジョブの数を指定します。 .Ar B フラグを指定しなければ、互換性モードはオフになります。 .It Fl k エラーが発生しても処理を続行します。 ただし、発生したエラーによって作成が不能になったターゲットに 依存したターゲットに関しては処理が中断されます。 .It Fl m Ar directory <...> 形式で読み込まれる .Pa sys.mk や makefile を検索するための ディレクトリを指定します。 複数のディレクトリを検索パスに加えることができます。 このパスは、デフォルトのシステムインクルードパス .Pa /usr/share/mk を上書きします。 さらに、システムインクルードパスを "..." 形式のインクルードによって 追加することができます( .Fl I オプションを参照)。 .It Fl n make が実行するであろうコマンド内容の表示のみを行い、実行はしません。 .It Fl P 並行して動作するジョブを一緒に混ぜて出力するのでなく、 与えられたジョブの順番をそろえて、ジョブが終了するまで表示しません。 このオプションは .Fl j が使われた時のみ効果を持ちます。 .It Fl q いっさいのコマンドを実行せず、指定されたターゲットが最新のものであれば 0 を、そうでなければ 1 を終了ステータスとして返します。 .It Fl r システムの makefile で定義された組み込みのルールを使用しません。 .It Fl S エラーが起きた時に処理を中止します。 デフォルトの動作です。 このオプションは再帰的な構築の際に .Fl k オプションを打ち消すのに必要となります。 .It Fl s 実行するコマンドを表示しません。 makefile のなかで、コマンドの先頭に .Sq Ic @ を指定するのと同じです。 .It Fl t makefile で指定されたターゲットを作り直すのではなく、ターゲットを作成 するか、あるいは最終更新日付を現在の時刻に設定することにより、 ターゲットが最新であるかのようにします。 .It Fl V Ar variable グローバルな文脈での .Nm の .Ar variable の値を表示します。如何なるターゲットも生成しません。 このオプションで複数のインスタンスを指定することができます。 変数は、各行ごとに表示されます。 未定義もしくは空の変数は、空行で 表現されます。 .It Fl v 特に冗長表示させます。 複数ジョブの make においては、ファイルバナーを生成させます。 .It Fl X .Fl V オプションを使用して変数の値を表示するときに、再帰的な値の展開をしません。 .It Ar variable Ns No = Ns Ar value 変数 .Ar variable の値を .Ar value に設定します。 .El .Pp makefile には 7 種類の行があります: 依存関係記述、シェルコマンド、変数 代入、インクルード文、条件命令、for ループ、コメントです。 .Pp 一般に、行は行末にバックスラッシュ .Pq Ql \e を置くことにより次行へ継続させることができます。 この場合、バックスラッシュ直後の改行と、次の行の先頭の 空白部分は 1 つの空白に置き換えられます。 .Sh ファイル依存関係記述 入力ファイルにおける依存関係記述行は、1 つ以上のターゲット、オペレータ、 0 個 以上のソースからなります。 これは、ターゲットがソースに .Dq 依存 しているという関係を 定義しており、通常は、ソースからターゲットが作成されます。 ターゲットと ソースとの厳密な関係はオペレータによって、両者間に指定します。 オペレータには以下の種類があります。 .Bl -tag -width flag .It Ic \&: ターゲットの最終更新日付が、いずれかのソースの最終更新日付よりも 古いものであれば、ターゲットは古いものであり、作り直されるべきものと 判断されます。 別の行でこのオペレータによる同じターゲットに関するソースの記述があれば、 それらはすべて 1 つにまとめられます。 ターゲットの作成中に .Nm が中断されると、ターゲットは削除されます。 .It Ic \&! ターゲットはつねに作り直されます。 ただし、作り直されるのは、 すべてのソースが検査され、必要と判断されたソースが作り直されたあとです。 このオペレータによる同じターゲットに関するソースの記述が別の行にもあれば、 それらはすべて 1 つにまとめられます。 ターゲットの作成中に .Nm が中断されると、ターゲットは削除されます。 .It Ic \&:: ソースが指定されていなかった場合、つねにターゲットは作り直されます。 指定されていた場合にはソースのいずれかがターゲットよりも新しい時だけ ターゲットは作り直されます。 本オペレータでは、別の行において同じ ターゲットに関するソースの記述があっても 1 つにまとめません。 ターゲットの作成中に .Nm が中断されても、ターゲットは削除されません。 .El .Pp ターゲットとソースは、シェルのワイルドカード表記として .Ql \&? , .Ql * , .Ql [] , .Ql {} を含むことができます。 .Ql \&? , .Ql * , .Ql [] の表記は、ターゲットまたはソースの最後の要素として記述でき、 存在するファイルを指定するものでなければなりません。 表記 .Ql {} はファイルが存在しなくてもかまいません。 シェルのように辞書順に並べられて 展開されることはなく、ファイルシステム上に並んでいる順番のまま行われます。 .Sh シェルコマンド ターゲットは、シェルコマンドの列と関連付けることができ、通常はそれによって ターゲットを作成します。 これに含まれる各コマンドは、 .Em 必ず 行頭のタブに続けて記述します。 同一のターゲットに 対して複数の依存記述行がある場合、 .Sq Ic :: オペレータを使用したのでなければ、それらのうちの 1 つにのみコマンド行を 続けることができます。 .Pp コマンドラインの先頭の文字が .Sq Ic @ , .Sq Ic \- , .Sq Ic + のいずれか ならば、コマンドは特別な扱いを受けます。 .Sq Ic @ は、コマンド実行前のコマンド内容表示を抑制します。 .Sq Ic \- は、コマンドの 0 ではない終了ステータスを無視するように指示します。 .Sq Ic + は、たとえ .Fl n がコマンドラインで指定されていたとしても、 コマンドを実行するようにします。 .Sh 変数代入 .Nm で使われる変数はシェルでの変数に類似しています。 そして、歴史的な経緯から、すべて大文字からなる名前が用いられます。 変数代入には以下の 5 通りのオペレータを使用できます。 .Bl -tag -width Ds .It Ic \&= 変数に値を代入します。その時点までの値は失われます。 .It Ic \&+= 現在の変数の値に、右辺の値を追加します。 .It Ic \&?= 変数が未定義の場合のみ、値を代入します .It Ic \&:= 右辺を展開した値を代入します。つまり、変数に代入する前に値の展開を行います。 通常、値の展開は代入時には行われず、変数が参照されるときに行われます。 .It Ic \&!= 右辺を展開した値をシェルに実行させ、実行結果を左辺の変数に代入します。 結果のなかに含まれる改行は空白に置き換えられます。 .El .Pp いずれの場合も、値の前にある空白は無視されます。 値が追加される場合、 変数の直前の値と追加する値との間に空白が挿入されます。 .Pp 変数は、ドル記号 .Pq Ql \&$ に続いて中括弧 .Pq Ql {} または小括弧 .Pq Ql () で囲まれた変数名を置くことにより展開されます。 もし変数名が 1 文字なら、変数名を囲む括弧は省略できますが、 このような省略形は推奨できません。 .Pp 変数置換は、変数が用いられている場所により、 2 つの別々のタイミングで 行われます。 依存関係記述行で用いられた変数は、その行が読み込まれたときに 展開されます。 シェルコマンド内で用いられた変数は、シェルコマンド実行時に 展開されます。 .Pp 変数には、優先度に従って、4 つの異なるクラスがあります: .Bl -tag -width Ds .It 環境変数 .Nm の環境中で有効な変数 .It グローバル変数 makefile とインクルードされた makefile 内で有効な変数。 .It コマンドライン変数 コマンドラインの中で指定された変数、および、 .Ev MAKEFLAGS 環境変数または .Ic .MAKEFLAGS ターゲットから取得した変数。 .It ローカル変数 あるターゲットのみに対して定義される変数。 ローカル変数には、以下の 7 種類があります: .Bl -tag -width ".ARCHIVE" .It Va .ALLSRC このターゲットに対するすべてのソースのリスト。 .Sq Va \&> も同じです。 .It Va .ARCHIVE アーカイブファイル名。 .Sq Va \&! も同じです。 .It Va .IMPSRC ターゲット名に変換するのに使用するソースのファイル名またはパス名 ( .Dq 暗黙の ソース)。 .Sq Va \&< も同じです。 .It Va .MEMBER アーカイブのメンバ。 .Sq Va \&% も同じです。 .It Va .OODATE ターゲットよりも新しいソースのリスト。 .Sq Va \&? も同じです。 .It Va .PREFIX ターゲットのディレクトリ名と拡張子を取り除いた名前。 .Sq Va * も同じです。 .It Va .TARGET ターゲットの名前。 .Sq Va @ も同じです。 .El .Pp 短い形式 .Sq Va @ , .Sq Va \&! , .Sq Va \&< , .Sq Va \&% , .Sq Va \&? , .Sq Va \&> , .Sq Va * は互換性のためのものですが、利用することは推奨できません。 また、 .Sq Va @F , .Sq Va @D , .Sq Va .It Ic \&.include Ar \*qfile\*q 指定した makefile をインクルードします。 アングルブラケットが使用された場合は、 makefile はシステムの makefile ディレクトリにあるものを用います。 ダブルクォートが使用された場合は、 makefile が存在するディレクトリ、 .Fl I オプションで指定されたディレクトリ、システムの makefile ディレクトリの 順に検索します。 .It Ic .undef Ar variable 指定したグローバル変数を未定義とします。 グローバル変数のみ、未定義とすることができます。 .It Ic .error Ar message makefile の処理を即座に終了します。 makefile のファイル名と、どの行でエラーとなったかと、 指定したエラーメッセージとを、標準出力に表示し、 .Nm は終了コード 1 で終了します。 .It Ic .warning Ar message 警告メッセージを発します。 makefile のファイル名、どの行でエラーになったかと、 指定したエラーメッセージとを、標準エラー出力に表示します。 メッセージ中の変数は展開されます。 .El .Pp 条件文は Makefile のどの部分を処理するのかを判定するために使用します。 C プリプロセッサがサポートする条件文と同様に使用されます。 以下の条件文がサポートされています: .Bl -tag -width Ds .It Xo .Ic .if .Oo \&! Oc Ns Ar expression .Op Ar operator expression ... .Xc 式の値をテストします。 .It Xo .Ic .ifdef .Oo \&! Oc Ns Ar variable .Op Ar operator variable ... .Xc 変数の値をテストします。 .It Xo .Ic .ifndef .Oo \&! Oc Ns Ar variable .Op Ar operator variable ... .Xc 変数の値をテストします。 .It Xo .Ic .ifmake .Oo \&! Oc Ns Ar target .Op Ar operator target ... .Xc ターゲット .Ar target が作成中かどうかをテストします。 .It Xo .Ic .ifnmake .Oo \&! Oc Ns Ar target .Op Ar operator target ... .Xc ターゲット .Ar target が作成中かどうかをテストします。 .It Ic .else 最後に行った条件文の意味を逆にします。 .It Xo .Ic .elif .Oo \&! Oc Ns Ar expression .Op Ar operator expression ... .Xc .Ic .else と直後の .Ic .if を対にしたものです。 .It Xo .Ic .elifdef .Oo \&! Oc Ns Ar variable .Op Ar operator variable ... .Xc .Ic .else と直後の .Ic .ifdef を対にしたものです。 .It Xo .Ic .elifndef .Oo \&! Oc Ns Ar variable .Op Ar operator variable ... .Xc .Ic .else と直後の .Ic .ifndef を対にしたものです。 .It Xo .Ic .elifmake .Oo \&! Oc Ns Ar target .Op Ar operator target ... .Xc .Ic .else と直後の .Ic .ifmake を対にしたものです。 .It Xo .Ic .elifnmake .Oo \&! Oc Ns Ar target .Op Ar operator target ... .Xc .Ic .else と直後の .Ic .ifnmake を対にしたものです。 .It Ic .endif 条件文の本体を終了させます。 .El .Pp オペレータ .Ar operator は、以下のうちのいずれかです。 .Bl -tag -width "Cm XX" .It Cm || 論理 .Tn OR 。 .It Cm && 論理 .Tn AND 。 .Sq Ic || より優先順位が上です。 .El .Pp C 言語と同様、 .Nm は条件式を、式の値を決定するのに必要なところまでしか評価しません。 評価順序を変更するには括弧を使います。 論理オペレータ .Sq Ic !\& は条件式全体の値を反転するのに使用します。 これは .Sq Ic && より優先順位が上です。 .Pp 式 .Ar expression は、以下のいずれかの形式です: .Bl -tag -width Ic .It Ic defined 引数として変数名をとり、変数が定義されていれば真となる。 .It Ic make 引数としてターゲット名をとり、そのターゲットが .Nm のコマンドライン引数に指定されているか、デフォルトのターゲット (明示的なものも暗黙的なものも含む。 .Va .MAIN の項を参照) として宣言されている場合に真となる。 .It Ic empty 引数として変数名 (と修飾子) をとり、展開した結果が空文字列ならば真となる。 .It Ic exists 引数としてファイル名をとり、ファイルが存在すれば真となる。 ファイルはシステム検索パス .Pf ( Va .PATH の項を参照) にそって検索される。 .It Ic target 引数としてターゲット名をとり、ターゲットが定義されているなら真となる。 .El .Pp 条件式 .Ar expression としては、数値あるいは文字列の比較を用いることもでき、 左辺には変数展開を使用可能です。 比較オペレータの 両辺は、変数展開が適用されたあとに比較されます。 値が 0x で始まるなら 16 進数であると解釈し、 さもなければ 10 進数と解釈します。 8 進数はサポートしていません。 標準的な C 言語の関係オペレータは全て利用可能です。 変数展開後、 .Sq Ic == または .Sq Ic != の左辺値または右辺値のいずれかが数値とは認められない場合、文字列として 比較を行います。 関係オペレータが指定されなかった場合、展開された変数と 0 とを 比較します。 .Pp 条件式を評価中に、評価できない単語が出現した場合は、条件式の形式によって、 .Dq make または .Dq defined オペレータを適用します。 条件式が .Ic .if , .Ic .ifdef または .Ic .ifndef ならば .Dq defined を、条件式が .Ic .ifmake または .Ic .ifnmake ならば .Dq make を、それぞれ適用します。 .Pp 条件式が真と評価されたなら、makefile の解析はそのまま続行されます。 偽と評価されたなら、 .Ic .else または .Ic .endif が見つかるまで makefile の解析をスキップします。 .Pp for ループは、いくつかのルールを一連のファイルに適用するのによく 用いられます。 以下がループの形式です: .Pp .Bl -tag -width indent -compact .It Ic .for Ar variable Ic in Ar expression .It .It Ic .endfor .El .Pp .Ar expression は評価されたあとに単語に分解され、それぞれを .Ar variable に代入 しながら、 .Ic make-rules 部分を繰り返し展開します。 .Sh コメント コメントはハッシュ記号 .Pq Ql # から始まり、シェルコマンド行以外のどこにでも置くことができます。 コメントは改行で終わります。 .Sh 特殊ソース .Bl -tag -width Ic .It Ic .IGNORE 本ターゲットに関連したコマンドでのエラーを無視します。 シェルコマンドの先頭にダッシュ .Ql \- を指定したのと等価です。 .It Ic .MAKE たとえ、 .Fl n や .Fl t オプションが指定されていても、このターゲットに関連したシェルコマンドを 実行します。 通常、再帰的な .Nm のために用いられます。 .It Ic .NOTMAIN 通常 .Nm は、最初に発見したターゲットをデフォルトのターゲットとみなします。 .Ic .NOTMAIN が指定されたターゲットはデフォルトのターゲットとはみなされなくなります。 .It Ic .OPTIONAL もし .Ic .OPTIONAL が指定されたターゲットの作り方がわからなくても、エラーとはせず、 そのターゲットは必要ないか、すでに存在しているものとみなします。 .It Ic .PRECIOUS 通常 .Nm が中断されたときは、作成途中のターゲットは削除されます。 本ソースを指定することで、そのターゲットを削除しなくなります。 .It Ic .SILENT 指定されたターゲットに関連づけられたシェルコマンドを実行するときに エコーを行いません。 シェルコマンドの先頭に .Ql @ を指定したのと等価です。 .It Ic .USE 指定されたターゲットをマクロ的に扱います。 .Ic .USE をソースに持つターゲット .Pq 以下ではマクロと呼びます が別のターゲットのソースとなった場合、その ターゲットはコマンド、ソース、属性( .Ic .USE は除く) をマクロから受け取ります。 もし、すでにターゲットにコマンドが指定されていた 場合は、マクロのコマンドが追加されます。 .It Ic .WAIT 特別な .Ic .WAIT ソースが依存関係行に現れた時には、ソースはその行中でソースが 作成されるまで待ちます。 ループは検出されず、ループ形式のターゲットは単に無視されます。 .El .Sh 特殊ターゲット 特殊ターゲットは、他のターゲットとともに使用してはいけません。 すなわち、 依存関係記述行の唯一のターゲットとして指定する必要があります。 .Bl -tag -width Ic .It Ic .BEGIN 本ターゲットに指定されたシェルコマンドは他の処理に先立って実行されます。 .It Ic .DEFAULT これは、作成方法がわからないどんなターゲットにも適用される .Ic .USE ルールのようなものです。シェルスクリプトのみを使用します。 .Ic .DEFAULT に指定されたコマンド中の .Ic .IMPSRC 変数はターゲット自身の名前に置換されます。 .It Ic .END 本ターゲットに指定されたシェルコマンドは、他のすべての処理の終了後に 実行されます。 .It Ic .IGNORE 指定されたソースに .Ic .IGNORE 属性を付与します。 もしソースが指定されていなければ、 .Fl i オプションを指定したのと同じ意味になります。 .It Ic .INCLUDES ソースファイル中で include される可能性のあるファイルの拡張子のリスト。 拡張子はあらかじめ .Ic .SUFFIXES で宣言されていなければなりません; このように宣言された拡張子は自身の検索パス( .Ic .PATH 参照) にそれぞれ .Fl I フラグを前に付けた状態で .Va .INCLUDES 特殊変数に設定されます。 .It Ic .INTERRUPT .Nm が中断されたとき、本ターゲットに指定されたコマンドを実行します。 .It Ic .LIBS .Ic .INCLUDES が include ファイルに対して行うことと同じことを ライブラリに対して行います。 ただし .Fl L フラグが使われます。 .It Ic .MAIN ターゲットを指定せずに .Nm が起動された場合、本ターゲットを処理します。 .Nm がデフォルトターゲットを選択した際に、 利用者がコマンドラインからデフォルトターゲットを指示できるようにするため、 明示的・暗黙的に関わらず必ず設定されます。 .It Ic .MAKEFLAGS ソースにおいて、 .Nm に指定するフラグを指定します。 フラグはシェルでタイプしたのと同様に 渡されますが、 .Fl f オプションは無効になります。 .It Ic .MFLAGS 上と同様です。下位互換性のためのものです。 .\" XXX: NOT YET!!!! .\" .It Ic .NOTPARALLEL .\" この名前のターゲットは、並列モードを使わすに実行されます。 .\" ターゲットが指定されていない時には、全てのターゲットが非並列モード .\" で実行されます。 .It Ic .NOTPARALLEL 並列モードを使いません。 .It Ic .NO_PARALLEL 上と同じですが、 .Nm pmake の変種のための互換性のためにあります。 .It Ic .ORDER シーケンス中の名前付きターゲットが作成されます。 .\" XXX: NOT YET!!!! .\" .It Ic .PARALLEL .\" 名前付きターゲットが並列モードで実行されます。 .\" ターゲットが指定されない時には、全てのターゲットが並列モードで実行 .\" されます。 .It Ic .PATH カレントディレクトリに発見できなかったときのファイルの検索パスを、 本ターゲットのソースとして指定します。 ソースが指定されなかった場合、 以前に設定されていたディレクトリが無効になります。 可能であれば .Ic .PATH を利用する方が、 .Va VPATH 変数を利用するよりも好まれています。 .It Ic .PATH\fIsuffix\fR カレントディレクトリに発見できなかったときの suffix のついたファイルの検索パスをソースとして指定します。 .Nm ユーティリティはファイルが見つからなかった場合に、 デフォルトパスよりも先に、まず suffix の付いた検索パスで探します。 この形式は .Ic .LIBS と .Ic .INCLUDES が動作するために必要です。 .It Ic .PHONY .Ic .PHONY 属性を指定したソースに適用します。 この属性を持ったターゲットは いつでも更新されていると考えられます。 .It Ic .PRECIOUS 指定されたソースに .Ic .PRECIOUS 属性を付与します。 もし、ソースが指定されなかった場合、 すべてのターゲットに .Ic .PRECIOUS 属性を与えます。 .It Ic .SILENT 指定されたソースに .Ic .SILENT 属性を付与します。 もし、ソースが指定されなかった場合、 ファイル中のすべてのコマンドに .Ic .SILENT 属性を与えます。 .It Ic .SUFFIXES ソースにおいて、 .Nm で用いる拡張子を指定します。 ソースが指定されなかった場合は、 以前の指定が無効になります。 .El .Sh 互換性 .Nm の古いバージョンは .Ev MAKEFLAGS の代わりに .Ev MAKE を使っていました。 この機能は POSIX への互換性のために削除されました。 内部変数 .Va MAKE は .Va .MAKE と同じ値が代入されます ; この機能は将来削除されるかもしれません。 .Pp ここに書かれている以上の .Nm の奥義のほとんどは、 より多くの互換性を保つために使用を避けるべきです。 .Sh 環境変数 .Nm ユーティリティは、存在する場合、次の環境変数の値を用います: .Ev MACHINE , .Ev MAKE , .Ev MAKEFLAGS , .Ev MAKEOBJDIR , .Ev MAKEOBJDIRPREFIX .Sh 関連ファイル .Bl -tag -width /usr/share/doc/psd/12.make -compact .It Pa .depend 依存関係リスト .It Pa Makefile 依存関係リスト .It Pa makefile 依存関係リスト .It obj オブジェクトディレクトリ .It Pa sys.mk システム定義の makefile (他のすべてのファイルよりも前に処理されます。 これには .Pa makefile と .Pa Makefile も含まれます) .It Pa /usr/share/mk システム定義の makefile が置かれるディレクトリ .It /usr/share/doc/psd/12.make PMake のチュートリアル .It Pa /usr/obj デフォルトの .Ev MAKEOBJDIRPREFIX ディレクトリ .El .Sh 使用例 インクルードされた makefile すべてを、訪問順にリストする。 .Pp .Dl "make -V .MAKEFILE_LIST | tr \e\ \e\en" .Sh バグ .Va .OBJDIR の決定は不条理といっていいほどまで曲解されます。 .Pp 複数の .Ic .MAIN 特殊ターゲットが存在した場合、 .Nm は最初のもの以外は黙って無視します。 .Pp .Nm がターゲット名なしに起動され、かつ、 .Ic .MAIN 特殊ターゲットが存在しなかった場合、 .Va .TARGETS にデフォルトターゲットは設定されません。 .Pp テストにおける .Ar expression の評価は非常に単純です。 今のところ、 .Ql .if ${VAR} op something という形式でしか動きません。 例えば、テストは .Ql .if ${VAR} == "string" のように書かなければなりません。 他の書き方ではエラーになります。 .Pp for ループはテストされる前に展開されるため、 .Bd -literal -offset indent \&.for ARCH in ${SHARED_ARCHS} \&.if ${ARCH} == ${MACHINE} ... \&.endif \&.endfor .Ed .Pp のような断片は動きません。 例えば、 .Bd -literal -offset indent \&.for ARCH in ${SHARED_ARCHS} \&.if ${MACHINE} == ${ARCH} ... \&.endif \&.endfor .Ed .Pp のように書き直す必要があります。 .Pp コロンの後のセミコロンの扱いに関して解析コードが壊れているため、 .Bd -literal -offset indent HDRS= foo.h bar.h all: \&.for h in ${HDRS:S;^;${.CURDIR}/;} ... \&.endfor .Ed .Pp のような断片は動きません。 .Sh 関連項目 .Xr mkdep 1 , .Xr make.conf 5 .Rs .%T "PMake - A Tutorial" .Re .Pa /usr/share/doc/psd/12.make にあります。 .Sh 歴史 .Nm は PWB UNIX ではじめて現れました。