スポンサーリンク

MAKE(1) FreeBSD 一般コマンドマニュアル MAKE(1)

名称

make − プログラムの依存関係をメンテナンスする

書式

make [−BPSXeiknqrstv] [−C directory] [−D variable] [−d flags] [−E variable] [−f makefile] [−I directory] [−j max_jobs] [−m directory] [−V variable] [variable=value] [target ...]

解説

make ユーティリティは、プログラムのメンテナンスを単純化するためのツールで す。その入力はファイルの生成とプログラムとの間の依存関係を指定するリスト が記述されています。カレントディレクトリまたは特別なオブジェクトディレク トリ (.OBJDIR 参照) のどちらか一方において BSDmakefile, makefile, Makefile の最初に見つかった方から、この指定のリストが読み込まれます。 .depend というファイルが見つかれば、それも読み込みます (mkdep(1) を参 照)。

本マニュアルはリファレンスのためのみのドキュメントです。 make と makefile に関する詳しい紹介は Make − A Tutorial を参照してください。

オプションは以下のとおりです。

       −B

シーケンス中の依存行のソースを作成するために、各コマンドに対して 1 つのシェルを実行する、バックワード互換モードで実行しようとしま す。このオプションは −j が使用されない限り、デフォルトで有効にな ります。

−C directory
makefile の読み取りや他のなにかをする前に、 directory へ移動しま す。複数の −C が指定された場合、それぞれは、直前のものに対する相 対として解釈されます。 −C / −C etc−C /etc と等価です。

−D variable
大域変数 variable を 1 と定義します。

−d flags
デバッグモードを有効にし、 make が表示するデバッグ情報の種類を指 定します。引数 flags には、以下のうち 1 つ以上を指定できます。

A
すべてのデバッグ情報を出力します。他のフラグをすべて指定 したことと等価です。

a
アーカイブ検索とキャッシュに関する情報を表示します。

c
条件評価に関する情報を表示します。

d
ディレクトリ検索とキャッシュに関する情報を表示します。

f
for ループの実行に関するデバッグ情報を表示します。

g1
処理を行う前に、入力のグラフを表示します。

g2
すべての処理を行ったあと、あるいはエラーにより終了する前 に入力のグラフを表示します。

j
複数のシェルを起動する場合の情報を表示します。

l
@ がコマンドに前置されていようといまいと、また他の「静 寂」フラグの有無に関わらず、Makefile のコマンドを表示しま す。これは「やかましい」動作としても知られています。

m
ターゲットの作成と変更日付に関する情報を表示します。

s
拡張子解釈に関する情報を表示します。

t
ターゲットリストのメンテナンスに関する情報を表示します。

v
変数の値に関する情報を表示します。

−E variable
(存在すれば) 環境の値で上書きする、makefile の中の変数を指定しま す。

−e
環境の値で makefile 中のすべての変数の値を上書きするように指示し ます。

−f makefile
デフォルトの makefileMakefile のかわりに、読み込むファイルを 指定します。もし makefile が ‘’ なら標準入力から読み込みます。複 数のファイルが指定可能で、指定した順に読み込まれます。

−I directory
makefile と、インクルードされる makefile を検索するためのディレク トリを指定します。システムで定義してある makefile のあるディレク トリ (または、複数のディレクトリ; −m オプションを参照) は自動的に リストに含まれ、検索されます。

−i
makefile から実行されたシェルコマンドが 0 でない終了ステータスを 返しても無視します。 makefile 中でコマンドの先頭に ‘’ を指定する のと同じです。

−j max_jobs
make
が同時に起動できるジョブの数を指定します。 B フラグを指定し なければ、互換性モードはオフになります。

−k
エラーが発生しても処理を続行します。ただし、発生したエラーによっ て作成が不能になったターゲットに依存したターゲットに関しては処理 が中断されます。

−m directory
<...> 形式で読み込まれる sys.mk や makefile を検索するためのディ レクトリを指定します。複数のディレクトリを検索パスに加えることが できます。このパスは、デフォルトのシステムインクルードパス /usr/share/mk を上書きします。さらに、システムインクルードパスを "..." 形式のインクルードによって追加することができます( −I オプ ションを参照)。

−n
make が実行するであろうコマンド内容の表示のみを行い、実行はしませ ん。

−P
並行して動作するジョブを一緒に混ぜて出力するのでなく、与えられた ジョブの順番をそろえて、ジョブが終了するまで表示しません。このオ プションは −j が使われた時のみ効果を持ちます。

−q
いっさいのコマンドを実行せず、指定されたターゲットが最新のもので あれば 0 を、そうでなければ 1 を終了ステータスとして返します。

−r
システムの makefile で定義された組み込みのルールを使用しません。

−S
エラーが起きた時に処理を中止します。デフォルトの動作です。このオ プションは再帰的な構築の際に −k オプションを打ち消すのに必要とな ります。

−s
実行するコマンドを表示しません。 makefile のなかで、コマンドの先 頭に ‘@’ を指定するのと同じです。

−t
makefile で指定されたターゲットを作り直すのではなく、ターゲットを 作成するか、あるいは最終更新日付を現在の時刻に設定することによ り、ターゲットが最新であるかのようにします。

−V variable
グローバルな文脈での makevariable の値を表示します。如何なる ターゲットも生成しません。このオプションで複数のインスタンスを指 定することができます。変数は、各行ごとに表示されます。未定義もし くは空の変数は、空行で表現されます。

−v
特に冗長表示させます。複数ジョブの make においては、ファイルバ ナーを生成させます。

−X
−V
オプションを使用して変数の値を表示するときに、再帰的な値の展開 をしません。

variable=value
変数 variable の値を value に設定します。

makefile には 7 種類の行があります: 依存関係記述、シェルコマンド、変数代 入、インクルード文、条件命令、for ループ、コメントです。

一般に、行は行末にバックスラッシュ (‘\’) を置くことにより次行へ継続させる ことができます。この場合、バックスラッシュ直後の改行と、次の行の先頭の空 白部分は 1 つの空白に置き換えられます。

ファイル依存関係記述

入力ファイルにおける依存関係記述行は、1 つ以上のターゲット、オペレータ、 0 個 以上のソースからなります。これは、ターゲットがソースに ‘‘依存’’ して いるという関係を定義しており、通常は、ソースからターゲットが作成されま す。ターゲットとソースとの厳密な関係はオペレータによって、両者間に指定し ます。オペレータには以下の種類があります。

       :

ターゲットの最終更新日付が、いずれかのソースの最終更新日付よりも古 いものであれば、ターゲットは古いものであり、作り直されるべきものと 判断されます。別の行でこのオペレータによる同じターゲットに関する ソースの記述があれば、それらはすべて 1 つにまとめられます。ターゲッ トの作成中に make が中断されると、ターゲットは削除されます。

!
ターゲットはつねに作り直されます。ただし、作り直されるのは、すべて のソースが検査され、必要と判断されたソースが作り直されたあとです。 このオペレータによる同じターゲットに関するソースの記述が別の行にも あれば、それらはすべて 1 つにまとめられます。ターゲットの作成中に make が中断されると、ターゲットは削除されます。

::
ソースが指定されていなかった場合、つねにターゲットは作り直されま す。指定されていた場合にはソースのいずれかがターゲットよりも新しい 時だけターゲットは作り直されます。本オペレータでは、別の行において 同じターゲットに関するソースの記述があっても 1 つにまとめません。 ターゲットの作成中に make が中断されても、ターゲットは削除されませ ん。

ターゲットとソースは、シェルのワイルドカード表記として ‘?’, ‘*’, ‘[]’, ‘{}’ を含むことができます。 ‘?’, ‘*’, ‘[]’ の表記は、ターゲットまたはソー スの最後の要素として記述でき、存在するファイルを指定するものでなければな りません。表記 ‘{}’ はファイルが存在しなくてもかまいません。シェルのよう に辞書順に並べられて展開されることはなく、ファイルシステム上に並んでいる 順番のまま行われます。

シェルコマンド

ターゲットは、シェルコマンドの列と関連付けることができ、通常はそれによっ てターゲットを作成します。これに含まれる各コマンドは、 必ず行頭のタブに続 けて記述します。同一のターゲットに対して複数の依存記述行がある場合、 ‘::’ オペレータを使用したのでなければ、それらのうちの 1 つにのみコマンド行を続 けることができます。

コマンドラインの先頭の文字が ‘@’, ‘’, ‘+’ のいずれかならば、コマンドは特 別な扱いを受けます。 ‘@’ は、コマンド実行前のコマンド内容表示を抑制しま す。 ‘’ は、コマンドの 0 ではない終了ステータスを無視するように指示しま す。 ‘+’ は、たとえ −n がコマンドラインで指定されていたとしても、コマンド を実行するようにします。

変数代入

make で使われる変数はシェルでの変数に類似しています。そして、歴史的な経緯 から、すべて大文字からなる名前が用いられます。変数代入には以下の 5 通りの オペレータを使用できます。

       =

変数に値を代入します。その時点までの値は失われます。

+=
現在の変数の値に、右辺の値を追加します。

?=
変数が未定義の場合のみ、値を代入します

:=
右辺を展開した値を代入します。つまり、変数に代入する前に値の展開 を行います。通常、値の展開は代入時には行われず、変数が参照される ときに行われます。

!=
右辺を展開した値をシェルに実行させ、実行結果を左辺の変数に代入し ます。結果のなかに含まれる改行は空白に置き換えられます。

いずれの場合も、値の前にある空白は無視されます。値が追加される場合、変数 の直前の値と追加する値との間に空白が挿入されます。

変数は、ドル記号 (‘$’) に続いて中括弧 (‘{}’) または小括弧 (‘()’) で囲まれ た変数名を置くことにより展開されます。もし変数名が 1 文字なら、変数名を囲 む括弧は省略できますが、このような省略形は推奨できません。

変数置換は、変数が用いられている場所により、 2 つの別々のタイミングで行わ れます。依存関係記述行で用いられた変数は、その行が読み込まれたときに展開 されます。シェルコマンド内で用いられた変数は、シェルコマンド実行時に展開 されます。

変数には、優先度に従って、4 つの異なるクラスがあります:

環境変数
make
の環境中で有効な変数

グローバル変数
makefile とインクルードされた makefile 内で有効な変数。

コマンドライン変数
コマンドラインの中で指定された変数、および、 MAKEFLAGS 環境変数ま たは .MAKEFLAGS ターゲットから取得した変数。

ローカル変数
あるターゲットのみに対して定義される変数。ローカル変数には、以下 の 7 種類があります:

.ALLSRC
このターゲットに対するすべてのソースのリスト。 ‘>’ も同 じです。

.ARCHIVE
アーカイブファイル名。 ‘!’ も同じです。

.IMPSRC
ターゲット名に変換するのに使用するソースのファイル名ま たはパス名 ( ‘‘暗黙の’’ ソース)。 ‘<’ も同じです。

.MEMBER
アーカイブのメンバ。 ‘%’ も同じです。

.OODATE
ターゲットよりも新しいソースのリスト。 ‘?’ も同じです。

.PREFIX
ターゲットのディレクトリ名と拡張子を取り除いた名前。 ‘*’ も同じです。

.TARGET
ターゲットの名前。 ‘@’ も同じです。

短い形式 ‘@’, ‘!’, ‘<’, ‘%’, ‘?’, ‘>’, ‘*’ は互換性のためのもので すが、利用することは推奨できません。また、 ‘@F’, ‘@D’, ‘<F’, ‘<D’, ‘*F’, ‘*D’ は AT&T System V UNIX の makefile との互換性のた めに存在していますが、利用することは推奨できません。

次の 4 つのローカル変数は依存関係記述行のソースに使うことができま す。これらは、その行のターゲット毎の値に展開されます。これらの ローカル変数は .TARGET, .PREFIX, .ARCHIVE, .MEMBER です。

さらに、 make では以下の内部変数または環境変数を利用することができます。

$
単一のドル記号 ‘$’ 。すなわち、 ‘$$’ は単一のドル記号に置 換されます。

MAKE
make
の起動に使用された名前 (argv[0]) 。

.CURDIR
make
が実行されたディレクトリ。 make ユーティリティは .CURDIR を、 getcwd(3) から渡される公式なパスに設定しま す。

.OBJDIR
ターゲットを作成するディレクトリへのパス。起動時に、 make はターゲットファイルを置く代わりのディレクトリを検索しま す。 make はこの特別なディレクトリに移動することを試み、 makefile がカレントディレクトリになかった場合にはこのディ レクトリで検索されます。以下の順番でディレクトリは試され ます:

1. ${MAKEOBJDIRPREFIX}/‘pwd‘
2. ${MAKEOBJDIR}
3. obj.${MACHINE}
4. obj
5. /usr/obj/‘pwd‘

最初に make が移動に成功したディレクトリが使われます。も し MAKEOBJDIRPREFIX または MAKEOBJDIR のどちらかが環境で 設定されていて make が対応するディレクトリに移動できな かった場合は、リストの残りをチェックすることなしにカレン トディレクトリが使われます。それらが定義されておらず make が残った 3 つのディレクトリのいずれにも移動できなかった場 合、カレントディレクトリが使われます。 MAKEOBJDIRPREFIX と MAKEOBJDIR とは環境変数でなければならず、 make のコマ ンドラインで設定してはいけません。

make ユーティリティは、 getcwd(3) で与えられる正規化され たパスを .OBJDIR へ設定します。

.MAKEFILE_LIST
デフォルトファイルや、コマンドラインや、 .include ディレ クティブから得られた makefile も含め、 make がさまざまな makefile を読み込むときに、 .MAKEFILE_LIST 変数にそれらの 名前が自動的に追加されます。現在の makefile の名前がこの 変数の末尾の単語となるようにするため、これらは、 make が パーズ開始する前に右側に追加されます。

.MAKEFLAGS
環境変数 MAKEFLAGS は、 make のコマンドラインにて指定され るあらゆるものを含みます。その中身は .MAKEFLAGS 変数に記 憶されます。 make のコマンドラインで指定されたオプション と変数代入のすべてが .MAKEFLAGS 変数に追加され、 make が 実行する全プログラムの環境にこの変数が MAKEFLAGS として組 み込まれます。

MFLAGS
下位互換性のために提供されます。この変数は、 MAKEFLAGS 環 境変数から得たオプションすべてに加え、 make のコマンドラ インで指定されたオプションすべてを含みます。

.TARGETS
make
が現在構築しているターゲットのリスト。

.INCLUDES
.INCLUDES
特殊ターゲット参照。

.LIBS
.LIBS
特殊ターゲット参照。

MACHINE
MACHINE 環境変数、または定義されていない場合は uname(3) によって得られる、 make が動作しているマシンアーキテク チャの名称。

MACHINE_ARCH
make
のコンパイル時に定義された make がどのマシンアーキテ クチャ向けにコンパイルされたかを示す名称。

VPATH
Makefile はコロンで区切られたディレクトリのリストを VPATH に設定することができます。 make が全ての入力 makefile の 解析を終了した後、このディレクトリでソースファイルを検索 します。

変数展開において、その変数内の単語を選択したり、変更したりすることができ ます ( ‘‘単語’’ とは空白で区切られた文字列です)。変数展開の一般形は、次の とおりです。

{variable[:modifier[:...]]}

各修飾子は、コロンと以下に示すいずれかの文字のうち 1 文字からなります。リ テラルなコロン (‘:’) を指定するにはコロンの前にバックスラッシュ (‘\’) を 置きます。

C/pattern
/replacement/[1g]
拡張正規表現 pattern (re_format(7) を参照) に一致する部分それ ぞれを、 ed(1) スタイルの replacement 文字列と置換すること で、その値の各語を変更します。通常、値中の各語の最初のパター ンを置換します。 ‘1’ 修飾子は、置換対象をたかだか 1 語に制限 します。 ‘g’ 修飾子は、置換対象の個数が、語 (または複数の語) 中で見つかる検索パターン数と同じになるようにします。 ‘1’ と ‘g’ は直交していることに注意してください。前者は、複数の語が 影響を受け得るか否かを指定しますが、後者は、影響を受ける各語 の中で複数の置換が発生し得るか否かを指定します。

E
変数中の各単語を拡張子で置換します。

H
変数中の各単語を、パスの最後の要素を除いた部分で置換します。

L
変数を小文字に変換します。

Mpattern
pattern にマッチする単語を選択します。標準的なワイルドカード (‘*’, ‘?’, ‘[]’) が使用できます。ワイルドカード文字はバックス ラッシュ (‘\’) によりエスケープできます。

Npattern
pattern にマッチしない単語を選択します。それ以外は M と同様で す。

O
変数中のすべての語をアルファベット的に整列させます。

Q
変数中のすべてのシェルメタ文字をクォートし、再帰起動される make に安全に渡せるようにします。

R
変数中の各単語から拡張子を取り除きます。

S/old_string
/new_string/[g]
変数の値で各単語中の最初の old_stringnew_string に置換し ます。もし、最後のスラッシュのあとに ‘g’ が指定されていれば、 各単語中に出現したすべての old_stringnew_string に置換さ れます。 old_string がキャレット (‘^’) で始まっているなら、 old_string を各単語の先頭からマッチさせることを意味します。 old_string がドル記号 (‘$’) で終わっているなら、その文字列を 各単語の終端にマッチさせることを意味します。 new_string 中の アンパサンド (‘&’) は old_string に置換されます。修飾文字列の 区切りにはどんな文字を使ってもかまいません。 ‘^’ , ‘$’ , ‘&’ と区切り文字はバックスラッシュ (‘\’) によりエスケープできま す。

old_stringnew_string 中では通常の変数置換が行われます。た だし、ドル記号 (‘$’) の展開を抑制するためには、通常のドル記号 の前置ではなく、バックスラッシュでエスケープします。

old_string=new_string
これは AT&T System V UNIX での変数置換の形式です。これは最後 の修飾子として指定する必要があります。もし、パターンマッチ文 字 %new_string にも old_string にも含まれないなら、 new_stringold_string はどちらも単語の最後にマッチするもの とみなされます。すなわち、拡張子のみか、または単語全部が置換 されることになります。そうでなければ、 %old_string に含ま れており、それは new_string に置換されます。

T
変数中の各単語をパスの最後の要素で置換します。

U
変数を大文字に変換します。

ディレクティブ、条件式、FOR ループ

make では、C 言語を彷彿させるディレクティブ、条件文、ループを使用すること ができます。これらの制御構造は、行頭に単一のドット (‘.’) がくることで識別 されます。以下のディレクティブがサポートされています:

       .include <file>

.include "file"
指定した makefile をインクルードします。アングルブラケットが使用 された場合は、 makefile はシステムの makefile ディレクトリにある ものを用います。ダブルクォートが使用された場合は、 makefile が存 在するディレクトリ、 −I オプションで指定されたディレクトリ、シス テムの makefile ディレクトリの順に検索します。

.undef variable
指定したグローバル変数を未定義とします。グローバル変数のみ、未定 義とすることができます。

.error message
makefile の処理を即座に終了します。 makefile のファイル名と、どの 行でエラーとなったかと、指定したエラーメッセージとを、標準出力に 表示し、 make は終了コード 1 で終了します。

.warning message
警告メッセージを発します。 makefile のファイル名、どの行でエラー になったかと、指定したエラーメッセージとを、標準エラー出力に表示 します。メッセージ中の変数は展開されます。

条件文は Makefile のどの部分を処理するのかを判定するために使用します。 C プリプロセッサがサポートする条件文と同様に使用されます。以下の条件文がサ ポートされています:

.if [
!]expression [operator expression ...]
式の値をテストします。

.ifdef [
!]variable [operator variable ...]
変数の値をテストします。

.ifndef [
!]variable [operator variable ...]
変数の値をテストします。

.ifmake [
!]target [operator target ...]
ターゲット target が作成中かどうかをテストします。

.ifnmake [
!]target [operator target ...]
ターゲット target が作成中かどうかをテストします。

.else
最後に行った条件文の意味を逆にします。

.elif [
!]expression [operator expression ...]
.else
と直後の .if を対にしたものです。

.elifdef [
!]variable [operator variable ...]
.else
と直後の .ifdef を対にしたものです。

.elifndef [
!]variable [operator variable ...]
.else
と直後の .ifndef を対にしたものです。

.elifmake [
!]target [operator target ...]
.else
と直後の .ifmake を対にしたものです。

.elifnmake [
!]target [operator target ...]
.else
と直後の .ifnmake を対にしたものです。

.endif
条件文の本体を終了させます。

オペレータ operator は、以下のうちのいずれかです。

||
論理 OR 。

&&
論理 AND 。 ‘||’ より優先順位が上です。

C 言語と同様、 make は条件式を、式の値を決定するのに必要なところまでしか 評価しません。評価順序を変更するには括弧を使います。論理オペレータ ‘!’ は 条件式全体の値を反転するのに使用します。これは ‘&&’ より優先順位が上で す。

expression は、以下のいずれかの形式です:

defined
引数として変数名をとり、変数が定義されていれば真となる。

make
引数としてターゲット名をとり、そのターゲットが make のコマン ドライン引数に指定されているか、デフォルトのターゲット (明示 的なものも暗黙的なものも含む。 .MAIN の項を参照) として宣言さ れている場合に真となる。

empty
引数として変数名 (と修飾子) をとり、展開した結果が空文字列な らば真となる。

exists
引数としてファイル名をとり、ファイルが存在すれば真となる。 ファイルはシステム検索パス (.PATH の項を参照) にそって検索さ れる。

target
引数としてターゲット名をとり、ターゲットが定義されているなら 真となる。

条件式 expression としては、数値あるいは文字列の比較を用いることもでき、 左辺には変数展開を使用可能です。比較オペレータの両辺は、変数展開が適用さ れたあとに比較されます。値が 0x で始まるなら 16 進数であると解釈し、さも なければ 10 進数と解釈します。 8 進数はサポートしていません。標準的な C 言語の関係オペレータは全て利用可能です。変数展開後、 ‘==’ または ‘!=’ の 左辺値または右辺値のいずれかが数値とは認められない場合、文字列として比較 を行います。関係オペレータが指定されなかった場合、展開された変数と 0 とを 比較します。

条件式を評価中に、評価できない単語が出現した場合は、条件式の形式によっ て、 ‘‘make’’ または ‘‘defined’’ オペレータを適用します。条件式が .if, .ifdef または .ifndef ならば ‘‘defined’’ を、条件式が .ifmake または .ifnmake ならば ‘‘make’’ を、それぞれ適用します。

条件式が真と評価されたなら、makefile の解析はそのまま続行されます。偽と評 価されたなら、 .else または .endif が見つかるまで makefile の解析をスキッ プします。

for ループは、いくつかのルールを一連のファイルに適用するのによく用いられ ます。以下がループの形式です:

.for variable in expression
<make-rules>
.endfor

expression は評価されたあとに単語に分解され、それぞれを variable に代入し ながら、 make-rules 部分を繰り返し展開します。

コメント

コメントはハッシュ記号 (‘#’) から始まり、シェルコマンド行以外のどこにでも 置くことができます。コメントは改行で終わります。

特殊ソース

       .IGNORE

本ターゲットに関連したコマンドでのエラーを無視します。シェル コマンドの先頭にダッシュ ‘−’ を指定したのと等価です。

.MAKE
たとえ、 −n−t オプションが指定されていても、このターゲッ トに関連したシェルコマンドを実行します。通常、再帰的な make のために用いられます。

.NOTMAIN
通常 make は、最初に発見したターゲットをデフォルトのターゲッ トとみなします。 .NOTMAIN が指定されたターゲットはデフォルト のターゲットとはみなされなくなります。

.OPTIONAL
もし .OPTIONAL が指定されたターゲットの作り方がわからなくて も、エラーとはせず、そのターゲットは必要ないか、すでに存在し ているものとみなします。

.PRECIOUS
通常 make が中断されたときは、作成途中のターゲットは削除され ます。本ソースを指定することで、そのターゲットを削除しなくな ります。

.SILENT
指定されたターゲットに関連づけられたシェルコマンドを実行する ときにエコーを行いません。シェルコマンドの先頭に ‘@’ を指定し たのと等価です。

.USE
指定されたターゲットをマクロ的に扱います。 .USE をソースに持 つターゲット (以下ではマクロと呼びます) が別のターゲットの ソースとなった場合、そのターゲットはコマンド、ソース、属性( .USE は除く) をマクロから受け取ります。もし、すでにターゲット にコマンドが指定されていた場合は、マクロのコマンドが追加され ます。

.WAIT
特別な .WAIT ソースが依存関係行に現れた時には、ソースはその行 中でソースが作成されるまで待ちます。ループは検出されず、ルー プ形式のターゲットは単に無視されます。

特殊ターゲット

特殊ターゲットは、他のターゲットとともに使用してはいけません。すなわち、 依存関係記述行の唯一のターゲットとして指定する必要があります。

       .BEGIN

本ターゲットに指定されたシェルコマンドは他の処理に先立って実 行されます。

.DEFAULT
これは、作成方法がわからないどんなターゲットにも適用される .USE ルールのようなものです。シェルスクリプトのみを使用しま す。 .DEFAULT に指定されたコマンド中の .IMPSRC 変数はターゲッ ト自身の名前に置換されます。

.END
本ターゲットに指定されたシェルコマンドは、他のすべての処理の 終了後に実行されます。

.IGNORE
指定されたソースに .IGNORE 属性を付与します。もしソースが指定 されていなければ、 −i オプションを指定したのと同じ意味になり ます。

.INCLUDES
ソースファイル中で include される可能性のあるファイルの拡張子 のリスト。拡張子はあらかじめ .SUFFIXES で宣言されていなければ なりません; このように宣言された拡張子は自身の検索パス( .PATH 参照) にそれぞれ −I フラグを前に付けた状態で .INCLUDES 特殊変 数に設定されます。

.INTERRUPT
make
が中断されたとき、本ターゲットに指定されたコマンドを実行 します。

.LIBS
.INCLUDES
が include ファイルに対して行うことと同じことをライ ブラリに対して行います。ただし −L フラグが使われます。

.MAIN
ターゲットを指定せずに make が起動された場合、本ターゲットを 処理します。 make がデフォルトターゲットを選択した際に、利用 者がコマンドラインからデフォルトターゲットを指示できるように するため、明示的・暗黙的に関わらず必ず設定されます。

.MAKEFLAGS
ソースにおいて、 make に指定するフラグを指定します。フラグは シェルでタイプしたのと同様に渡されますが、 −f オプションは無 効になります。

.MFLAGS
上と同様です。下位互換性のためのものです。

.NOTPARALLEL
並列モードを使いません。

.NO_PARALLEL
上と同じですが、 pmake の変種のための互換性のためにあります。

.ORDER
シーケンス中の名前付きターゲットが作成されます。

.PATH
カレントディレクトリに発見できなかったときのファイルの検索パ スを、本ターゲットのソースとして指定します。ソースが指定され なかった場合、以前に設定されていたディレクトリが無効になりま す。可能であれば .PATH を利用する方が、 VPATH 変数を利用する よりも好まれています。

.PATHsuffix
カレントディレクトリに発見できなかったときの suffix のついた ファイルの検索パスをソースとして指定します。 make ユーティリ ティはファイルが見つからなかった場合に、デフォルトパスよりも 先に、まず suffix の付いた検索パスで探します。この形式は .LIBS.INCLUDES が動作するために必要です。

.PHONY
.PHONY
属性を指定したソースに適用します。この属性を持ったター ゲットはいつでも更新されていると考えられます。

.PRECIOUS
指定されたソースに .PRECIOUS 属性を付与します。もし、ソースが 指定されなかった場合、すべてのターゲットに .PRECIOUS 属性を与 えます。

.SILENT
指定されたソースに .SILENT 属性を付与します。もし、ソースが指 定されなかった場合、ファイル中のすべてのコマンドに .SILENT 属 性を与えます。

.SUFFIXES
ソースにおいて、 make で用いる拡張子を指定します。ソースが指 定されなかった場合は、以前の指定が無効になります。

互換性

make の古いバージョンは MAKEFLAGS の代わりに MAKE を使っていました。この 機能は POSIX への互換性のために削除されました。内部変数 MAKE.MAKE と 同じ値が代入されます ; この機能は将来削除されるかもしれません。

ここに書かれている以上の make の奥義のほとんどは、より多くの互換性を保つ ために使用を避けるべきです。

環境変数

make ユーティリティは、存在する場合、次の環境変数の値を用います: MACHINE, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX

関連ファイル

       .depend

依存関係リスト
Makefile
依存関係リスト
makefile
依存関係リスト
obj
オブジェクトディレクトリ
sys.mk
システム定義の makefile (他のすべてのファイル よりも前に処理されます。これには makefileMakefile も含まれます)
/usr/share/mk
システム定義の makefile が置かれるディレクト リ
/usr/share/doc/psd/12.make
PMake のチュートリアル
/usr/obj
デフォルトの MAKEOBJDIRPREFIX ディレクトリ

使用例

インクルードされた makefile すべてを、訪問順にリストする。

make -V .MAKEFILE_LIST | tr \ \\n

バグ

.OBJDIR の決定は不条理といっていいほどまで曲解されます。

複数の .MAIN 特殊ターゲットが存在した場合、 make は最初のもの以外は黙って 無視します。

make がターゲット名なしに起動され、かつ、 .MAIN 特殊ターゲットが存在しな かった場合、 .TARGETS にデフォルトターゲットは設定されません。

テストにおける expression の評価は非常に単純です。今のところ、 ‘.if ${VAR} op something’ という形式でしか動きません。例えば、テストは ‘.if ${VAR} == string’ のように書かなければなりません。他の書き方ではエラーに なります。

for ループはテストされる前に展開されるため、

      .for ARCH in ${SHARED_ARCHS}
      .if ${ARCH} == ${MACHINE}
           ...
      .endif
      .endfor

のような断片は動きません。例えば、

      .for ARCH in ${SHARED_ARCHS}
      .if ${MACHINE} == ${ARCH}
           ...
      .endif
      .endfor

のように書き直す必要があります。

コロンの後のセミコロンの扱いに関して解析コードが壊れているため、

      HDRS=   foo.h bar.h

     all:
      .for h in ${HDRS:S;^;${.CURDIR}/;}
           ...
      .endfor

のような断片は動きません。

関連項目

mkdep(1), make.conf(5)

       PMake - A Tutorial.  /usr/share/doc/psd/12.make にあります。

歴史

make は PWB UNIX ではじめて現れました。

FreeBSD 10.0 August 4, 2004 FreeBSD 10.0

スポンサーリンク