目次
この資料は、NetBSD の make(1) のマニュアルページを自分用にまとめなおしたもの。
マニュアルに比べると説明を簡略化している。 具体例は基本的に含まない(書くなら別資料にしたい)。 逆に、マニュアルには明記されていないけど説明を加えた部分もある。 但し、筆者の理解不足で間違った説明が含まれている可能性は大いにある。
対象バージョンは、2010年5月頃の NetBSD-current 5.99.29 の make(1)。 NetBSD-5.x 系には存在しない新しい機能には (新) とマークしてある。
make [-BeikNnqrstWX] [-C directory] [-D variable] [-d flags] [-f makefile] [-I directory] [-J private] [-j max_jobs] [-m directory] [-T file] [-V variable] [variable=value] [target ...]
オプション | 機能 |
---|---|
-B | 1つのコマンドに1つのシェルで順序通り実行する(?) |
-C directory (新) | 最初にディレクトリ directory へ 移動する。 複数指定すると順に移動していく。 (-C / -C etc なら /etc への移動と同じ) |
-D variable | グローバル変数 variable を 1 にセット |
-d [-]flags | デバッグ情報を表示する。 flags はデバッグ種別 (次表参照)。'-' を付けるとサブ make に伝播しない。 |
-e | makefile 内の変数代入を(パーシング後に)環境変数で上書き する |
-f makefile | デフォルト makefile の代わりに makefile を読み込む。 複数指定すると順に読み込む。'-' は標準入力。 |
-I directory | makefile のサーチパスを指定。複数指定できる。 メモ: 相対パスは .OBJDIR が基準になるみたい |
-i | シェルコマンドが 0 以外で終了しても無視(処理を続行)。 各コマンドの前に '-' を指定するのと等価。 |
-J private | 再帰 make で内部的に使われるもので、 ユーザーが使うべきではない。 |
-j max_jobs | make が同時に実行する最大ジョブ数を指定 |
-k | エラーが発生しても処理を続ける。-i と異なり 後続コマンドとそれに依存するターゲットは処理しない。 |
-m directory | sys.mk と .include <makefile> のサーチパスを指定。 複数指定できる。 デフォルトの /usr/share/mk を上書きすることに注意。 パスが .../ で始まるとき、その部分はルートディレクトリに 向かって上位ディレクトリに順に置き換えてサーチされる。 |
-n | 実行すべきコマンドを表示するけど実行はしない。 但し .MAKE 属性を持つターゲットは除く。 |
-N | 実行すべきコマンドを表示するけど実行はしない。 .MAKE 属性を持つターゲットも含む。 |
-q | コマンドを一切実行しない。指定されたターゲットが up-to-date ならば0、それ以外のときは1で終了する。 |
-r | システム makefile (sys.mk) のルールを使わない |
-s | コマンドをエコーしない。 各コマンド行の頭に @ を付加するのと等価。 |
-T tracefile | -j フラグ使用時にトレースレコードを tracefile へ追加 |
-t | ターゲットを再生成する代わりに修正時刻を更新 |
-V variable | グローバル変数 variable の値を表示。 variable が $ を含んでいたら変数展開してから表示。 複数指定できる。ターゲットは生成しない。 |
-W | makefile パーシング中の警告をエラーとして扱う |
-X | コマンドライン引数の変数設定を環境変数として export しない。但し、環境変数 MAKEFLAGS への設定は行なわれる。 |
variable=value | 変数 variable の値を value に設定。 -X 指定時を除き、環境変数としても export される。 |
-d オプションで指定できるデバッグフラグを示す。
デバッグフラグ | 機能 |
---|---|
A | 全てのデバッグ情報を表示 |
a | アーカイブ検索とキャッシングに関するデバッグ情報を表示 |
C | カレントディレクトリに関するデバッグ情報を表示 |
c | 条件評価に関するデバッグ情報を表示 |
d | ディレクトリ検索とキャッシングに関するデバッグ情報を表示 |
e | 失敗したコマンドとターゲットに関するデバッグ情報を表示 |
F[+]filename | デバッグ出力の書き込み先の指定。 filename はファイル名か stdout か stderr(デフォ)。 '+' を付けると追記モード。 ファイル名が .%d で終わるとき pid に置き換えられる。 |
f | ループ評価に関するデバッグ情報を表示 |
g1 | 全ての make の前に入力グラフを表示 |
g2 | 全ての make の後 or エラー終了の前に入力グラフを表示 |
g3 | エラー終了の前に入力グラフを表示 |
j | 複数のシェルの実行に関するデバッグ情報を表示 |
l | 実行されるコマンドを (先頭の @ や他の "quiet" フラグの有無に拘らず)表示 |
m | ターゲット生成に関するデバッグ情報を表示 (修正日時を含む) |
n | コマンド実行時に作られる一時的なコマンドスクリプトを 削除しない (環境変数 TMPDIR か /tmp の下に makeXXXXXX というファイル名で作られる) メモ: どういうときに作られるの? 作り方が分からん |
p | makefile のパーシングに関するデバッグ情報を表示 |
s | サフィックス変換ルールに関するデバッグ情報を表示 |
t | ターゲットリスト管理に関するデバッグ情報を表示 |
v | 変数代入に関するデバッグ情報を表示 |
x | シェルコマンドに -x を付けて実行する (実際に実行されているコマンドが表示される) |
make は次の順序で makefile を読み込む。
システム makefile (sys.mk) を読み込む。 読み込みに失敗したらエラー。
-f オプションで makefile が指定されたときはそれらを順に読み込む。
それ以外のときは、ファイル makefile を読み込み、 それに失敗したらファイル Makefile を読み込む。両方失敗したらエラー。
${.CURDIR}/.depend を読み込み、それに失敗したら ${.OBJDIR}/.depend を読み込む。両方失敗してもエラーにはならない。
makefile は以下の行から構成される。
通常、行末にバックスラッシュ(\)があると次行へ継続する。 バックスラッシュに続く改行文字と次行の最初の空白は1つの空白に 置き換えられる。
依存関係行は、1つ以上のターゲット、1つのオペレータ、0個以上のソースから 構成される。
書式:
ターゲット1 ターゲット2 ... オペレータ ソース1 ソース2 ...
ターゲット1 は ソース1、ソース2、... に依存し、 これらのソースから作られる、という関係を示している。 ターゲット2、... についても同様にソース1、ソース2、... に依存し、 これらのソースから作られる。
オペレータには以下の3種類がある。
オペレータ | 動作 |
---|---|
: | ターゲットが存在しないかターゲットよりも新しいソースが存在する なら、そのターゲットは out-of-date とみなされ再生成される。 同じターゲットについて複数の依存関係行が存在するとき、 それらのソースは1つにまとめられる。 make が中断したときターゲットは削除される。 |
! | ターゲットは常に再生成される。 但し、その前に依存するソースは必要に応じて再生成される。 同じターゲットについて複数の依存関係行が存在するとき、 それらのソースは1つにまとめられる。 make が中断したときターゲットは削除される。 |
:: | ソースが未指定のとき、ターゲットは常に再生成される。 ソースが指定されたときは、ターゲットより新しいソースが存在する なら、そのターゲットは out-of-date とみなされ再生成される。 同じターゲットについて複数の依存関係行が存在するとき、 ソースは1つにまとめられず別々に処理される。 make が中断してもターゲットは削除されない。 |
ターゲットとソースにはシェルのワイルドカード ?, *, [], {} を 含むことができる。但し、展開はアルファベット順ではないことに注意。
同じターゲットについて複数の依存関係行を記述する場合、 同じオペレータを使わなければならない。
各ターゲットにはシェルコマンド列が関連付けられる。 多くの場合それらはターゲットを生成するためのものである。 各コマンドの行頭はタブ文字で開始しなければならない。
同じターゲットについて複数の依存関係行が存在するときは、 そのうち1つの依存関係行の後ろにシェルコマンド列を書くことができる。 但し、'::' オペレータが使用されている場合を除く。
各コマンドの先頭(タブの後ろ)に @, +, - の任意の組合せを付加できる。
付加文字 | 機能 |
---|---|
@ | 実行前にコマンドを表示しない |
+ | -n オプションが指定されたときでもコマンドを実行する (.MAKE スペシャルソースと同じ効果) |
- | コマンドが 0 以外で終了しても無視する(通常はエラー終了) |
書式 | 動作 |
---|---|
VAR = VAL | 変数 VAR に VAL を代入する。 |
VAR += VAL | 変数 VAR の現在値の末尾に空白と VAL を追加する。 |
VAR ?= VAL | 変数 VAR が未定義のときだけ VAL を代入する。 |
VAR := VAL | 変数 VAR に VAL を展開代入する。 但し、未定義の変数は展開されない。 |
VAR != CMD | コマンド CMD を実行した出力を変数 VAR に代入する。 |
変数の展開は、変数名を括弧({ } か ( )) で囲んで 頭にドル記号 $ を付ける。ただし、変数名が1文字のとき括弧は不要。
変数名自体がドル記号 $ を含むとき、その変数名が最初に展開される。 展開した結果が更にドル記号 $ を含んでいたら更に展開される。 そのため、ドル、括弧、空白文字を含む変数名は避けた方が無難。
変数展開のタイミング:
以下の4種類の変数クラスがある。
変数クラス | 説明 |
---|---|
環境変数 | make の環境変数 |
グローバル変数 | makefile あるいはインクルードされる makefile の中で 定義される変数 |
コマンドライン変数 | make のコマンドラインで指定される変数 |
ローカル変数 | 特定のターゲット用に定義される変数 |
後ろへ向かうにつれて優先度が高くなる。 優先度の高い変数設定が優先度の低い変数設定を上書きする。
以下のローカル変数がある。
ローカル変数名 | 別名 | 内容 |
---|---|---|
.ALLSRC | > | そのターゲットに対する全てのソースのパス |
.ARCHIVE | なし | アーカイブファイルの名前 |
.IMPSRC | < | サフィクス変換ルールに該当するソースのパス |
.MEMBER | なし | アーカイブメンバーの名前 |
.OODATE | ? | out-of-date と判定されたソースのパスのリスト |
.PREFIX | * | ターゲットファイル名のプリフィッス |
.TARGET | @ | ターゲットの名前 |
組み込み変数の値は make が自動的に設定する。 ユーザが makefile やコマンドライン引数で設定できるものもある。
組み込み変数名 | 値 |
---|---|
$ | 1つのドル記号($)。即ち $$ は $ 展開される。 |
.ALLTARGETS | これまでに出現した(パースされた)ターゲットのリスト |
.CURDIR | make が実行されたディレクトリのパス。 |
MAKE | make が実行された名前(argv[0])。 |
.MAKE.DEPENDFILE (新) | 生成された依存関係の読み込み元 makefile (デフォルトは .depend) |
.MAKE.EXPORTED | .export により export された変数名のリスト |
.MAKE.JOBS | -j オプションで指定した値 (最大ジョブ数) |
.MAKE.JOB.PREFIX | -j オプションで最大ジョブ数が指定されているとき、 各ターゲット処理時に表示される文字列 '--- target ---' の前に挿入する文字列を設定できる |
MAKEFLAGS | make のコマンドラインで指定された全ての引数が 元の値の末尾に追加される。 これは環境変数であるためサブコマンドに伝播する。 |
.MAKE.LEVEL (新) | 再帰 make の現在の深さ(最上位での初期値は0)。 同名の環境変数にはプラス1した値が格納され 次のサブ make に渡される。 |
.MAKE.MAKEFILE_PREFERENCE (新) | make が探す makefile ファイル名のリスト (優先度順。デフォルトは makefile Makefile)。 |
.MAKE.MAKEFILES | make が読み込んだ makefile ファイル名のリスト (同じファイルが複数回読まれたら一度だけ記録される) |
.MAKE.MODE (新) | make の実行モード(現在は "compat" のみ)。 全ての makefile が読まれた後に処理される。 |
.MAKEOVERRIDES | コマンドラインで設定された変数名のリストを保持。 この変数に対して変数名を追加/除去すると MAKEFLAGS においてその変数の設定記述が追加/除去される。 |
.MAKE.PID | make のプロセスID |
.MAKE.PPID | make の親プロセスのプロセスID |
MAKE_PRINT_VAR_ON_ERROR | make がエラーで停止したときに表示する変数名を格納 |
.newline | 改行文字 |
.OBJDIR | ターゲットの生成先ディレクトリの絶対パス。 後述するルールに従って自動的に設定される。 コマンドは全てこのディレクトリで実行される。 |
.PARSEDIR | パーシング中の makefile のディレクトリの絶対パス。 パーシング中のみセットされる。 |
.PARSEFILE | 現在パーシングしている makefile のファイル名 (ディレクトリ部を除く)。パーシング中のみセットされる。 |
.PATH | ファイルサーチパスのリスト。初期値は . と ${.CURDIR}。 更新は変数代入ではなくターゲット .PATH を使う(後述)。 |
PWD | .CURDIR と .OBJDIR に関連する。詳しくはマニュアルを参照 |
VPATH | コロン(:)で区切られたファイルサーチパスのリスト。 他の make プログラムとの互換用としてサポートされる。 代わりに .PATH を使うこと。 |
make は以下のディレクトリへ順に chdir(2) を試行し、 最初に成功したディレクトリの絶対パスを .OBJDIR に代入する。
{MAKEOBJDIRPREFIX}${.CURDIR}
但し、環境変数かコマンドラインで変数 MAKEOBJDIRPREFIX が 設定されている場合のみ。
${MAKEOBJDIR}
但し、環境変数かコマンドラインで変数 MAKEOBJDIR が 設定されている場合のみ。
${.CURDIR}/obj.${MACHINE}
${.CURDIR}/obj
/usr/obj/${.CURDIR}
${.CURDIR}
この仕組はアウトオブソースビルドに使われる。 これだけ使用例を書いておきたい:
$ MAKEOBJDIR='${.CURDIR:C,^/usr/src,/var/obj,}' $ export MAKEOBJDIR $ mkdir -p /var/obj/foo $ cd /usr/src/foo $ make
この場合は .CURDIR=/usr/src/foo、.OBJDIR=/var/obj/foo となる
変数修飾子は、変数値を加工したり特定のワードを取出したりするのに使用する。 ここで「ワード」とは空白文字で区切られた各文字列のこと。
変数展開の一般的なフォーマット:
${変数名[:変数修飾子[:...]]}
変数修飾子はコロンで開始する。 バックスラッシュ(\)によってエスケープできる。
修飾子の設定を変数によって指定することも出来る。:
modifier_variable = 修飾子[:...] ${変数名:${modifier_variable}[:...]}
modifier_variable の中の修飾子がドル記号($)が含むなら、 早期展開を避けるために二重($$)にしなければならない。
変数修飾子の一覧:
変数修飾子 | 機能、展開結果 |
---|---|
:E | 変数値の各ワードのサフィックスを取出す |
:H | 変数値の各ワードから最後の要素を除去(dirname) |
:Mpattern | 変数値からパターン pattern にマッチするワードのみ 取出す。シェルのワイルドカード *, ?, [] を使用できる。 ワイルドカードはバックスラッシュ(\)でエスケープ可。 |
:Npattern | 変数値からパターン pattern にマッチしないワードのみ 取出す。ワイルドカードについては :M と同じ。 |
:O | 変数値の全ワードに対しアルファベット順にソート。 逆順ソートは :O:[-1..1] のようにする。 |
:Ox | 変数値の全ワードをランダムに並べかえる。 変数修飾を参照するたびに結果が変化することに注意。 確定したければ := による展開代入を使うこと。 |
:Q | 変数値の中のシェルのメタ文字を全てクォートする (サブコマンドの引数として安全に渡すため) |
:R | 変数値の全ワードからサフィックスを除去 |
:tA (新) |
変数値の各ワードのパスを絶対パスに変換する (realpath(3)を使用)。 そのパスが存在しないときは変数値がそのまま値となる。 相対パスは ${.OBJDIR} が基準。 |
:tl | 変数値を小文字に変換 |
:tsc | 変数値の全ワードを c で連結。 c を省略すると連結文字なし。 c が空白ならワードの並びのまま。 |
:tu | 変数値を大文字に変換 |
:tW | 変数値をシングルワードとして扱う(空白文字でワード連結)。 :[*] を参照。 メモ: 後続の修飾子がそう扱う |
:tw | 変数値を空白文字で区切られたワード列として扱う。 :[@] を参照 メモ: 後続の修飾子がそう扱うだけ |
:S/old_string/new_string/[1gW] | 変数値の中の old_string を new_string に置き換える。
|
:C/pattern/replacement/[1gW] | :S と同じだが old_string, new_string の代わりに ed(1)スタイルの正規表現パターンが使われる点が異なる。 メモ: replacement の中で \1, \2, ... が使える |
:T | 変数値の各ワードから最後の要素を取出す(basename) |
:u | 隣接して重複するワードを削除(uniq) |
:?true_string:false_string | ".if 変数名" が真になるなら true_string1 それ以外のときは false_string に置き換える。 変数名の部分は本当の変数名でなくても .if の条件式に入るステートメントなら何でも可。 |
:old_string=new_string | AT&T System V UNIX スタイルの変数置換。 たぶん必要ないので省略。 |
:@temp@string@ | 変数値の各ワードについて、変数 temp に代入し string を評価した結果に置き換える |
:Unewval | 変数が未定義なら newval 、 変数が定義済みならその変数値となる |
:Dnewval | 変数が定義済みのとき newval となる |
:L | 変数名がそのまま値となる(リテラルってことね) |
:P | 変数名の部分に記述されたノードのパスが値となる。 ノードとは依存関係行に記述されたファイル名のこと。 そのノードがまだ出現していないかファイルが存在しないなら 変数名がそのまま値となる。 |
:!cmd! | コマンド cmd の出力を値とする (変数名部分は使われない) |
:sh | 変数値をコマンドとして実行した出力を値とする。 |
::=str | 空文字列への展開と同時に変数に str を代入する。 これを使うとシェルコマンド実行時に変数を設定できる。 メモ: コマンドラインで設定した変数は期待通りにならん |
::?=str | 空文字列への展開と同時に変数が未定義のときだけ変数に str を代入 |
::+=str | 空文字列への展開と同時に変数値の末尾に str を追加 |
::!=cmd | 空文字列への展開と同時にコマンド cmd の出力を変数に 代入 |
:[index] | 変数値の index 番目のワードを取出す。 1が先頭ワード、2が第2ワード、...、 -1が最終ワード、-2が末尾の1つ前のワードを表す。 |
:[start..end] | 変数値の start 番目から end 番目のワードを取出す。 1が先頭ワード、2が第2ワード、...、 -1が最終ワード、-2が末尾の1つ前のワードを表す。 start と end を逆にすれば逆順になる。 |
:[*] | 後続の修飾子はこの変数値をシングルワードとして扱う |
:[0] | :[*] と同じ |
:[@] | 後続の修飾子はこの変数値を空白文字で区切られた ワード列として扱う |
:[#] | 変数値のワード数に置換される |
書式 | 機能 |
---|---|
.include <FILE> | インクルード元と同じディレクトリ、 -m で指定したディレクトリ、 環境変数 MAKESYSPATH のディレクトリを順に検索し、 最初にオープンできたファイル FILE をインクルードする。 1つもオープンできなければエラー。 |
.include "FILE" | インクルード元と同じディレクトリ、 -I で指定したディレクトリ、 -m で指定したディレクトリ、 環境変数 MAKESYSPATH のディレクトリを順に検索し、 最初にオープンできたファイル FILE をインクルードする。 |
.-include ... | .include と同じだが、 オープンに失敗してもエラーにはならず単に無視する。 |
.sinclude ... | .-include と同じ |
書式 | 機能 |
---|---|
.if [!] EXP [OP EXP ...] | 式 EXP の値をテスト(後述) |
.ifdef [!] VAR [OP VAR ...] | 変数 VAR が定義済みかテスト |
.ifndef [!] VAR [OP VAR ...] | 変数 VAR が未定義かテスト |
.ifmake [!] TGT [OP TGT ...] | ターゲット TGT が make の引数で 指定されたかテスト |
.ifnmake [!] TGT [OP TGT ...] | ターゲット TGT が make の引数で 指定されたかテスト |
.else | 最後の条件文の意味を逆にする |
.elif [!] EXP [OP EXP ...] | .else と .if の組み合わせ |
.elifdef [!] VAR [OP VAR ...] | .else と .ifdef の組み合わせ |
.elifndef [!] VAR [OP VAR ...] | .else と .ifndef の組み合わせ |
.elifmake [!] TGT [OP TGT ...] | .else と .ifmake の組み合わせ |
.elifnmake [!] TGT [OP TGT ...] | .else と .ifnmake の組み合わせ |
.endif | 条件文を終了する |
'!' は条件を反転させる。
オペレータ OP:
オペレータ OP | 機能 |
---|---|
|| | 論理和 |
&& | 論理積。|| よりも優先度が高い。 |
条件式 EXP:
条件式 EXP | 機能 |
---|---|
defined(VAR) | 変数 VAR が定義済みのとき真 |
VAR | 変数 VAR が定義済みのとき真 |
make(TGT) | ターゲット TGT が make の引数で指定されたか、 その行よりも前に(.MAINで)デフォルトターゲットとして 宣言されていたら真。 |
empty(VAR) | ${VAR} の展開結果が空文字列のとき真。 変数名 VAR の後ろに変数修飾子を付けてもよい。 |
exists(FILE) | ファイル FILE が存在するとき真。.PATH から検索される。 |
target(TGT) | ターゲット TGT が定義済みのとき真 |
commands(TGT) | ターゲット TGT が定義され、それに関連するコマンドを 持つとき真 |
X1 == X2 | X1 と X2 が等しければ真。 最初に変数展開が行なわれる。 両方とも数値なら算術比較、それ以外のときは文字列比較が 行なわれる。算術比較では 0x で始まる数値は16進数、 それ以外の数値は10進数とみなされる。 |
X1 != X2 | X1 == X2 の否定 |
数値 | 数値が 0 のとき偽、0 以外のとき真。 |
"string" | string が空文字列のとき偽、それ以外のとき真 |
${VAR} | 変数 VAR が未定義のときエラー、${VAR} の展開結果が 0 か空文字列のとき偽、それ以外のとき真。 |
書式 | 機能 |
---|---|
.for VAR ... in EXP | 式 EXP の展開結果を先頭ワードから順に変数 VAR ... に代入し、.endfor までの記述を評価する。 ワードを全て使い切るまでこれを繰り返す。 EXP の ワード数は変数の個数の倍数でなければならない。 |
.endfor | 繰り返しの終了 |
書式 | 機能 |
---|---|
.error MSG (新) | makefile 名と行番号ととともに "MSG" を表示して make を終了させる。 |
.export | 内部変数(.で始まるやつ)を除く全てのグローバル変数を 環境変数に登録(export)する。 |
.export VAR ... | グローバル変数 VAR ... を環境変数に登録(export)する。 .MAKE.EXPORTED に変数名 VAR を追加するのと等価。 |
.info MSG (新) | makefile 名と行番号とともに "MSG" を表示する |
.undef VAR | グローバル変数 VAR を未定義にする |
.unexport (新) | 全てのグローバル変数を環境変数から削除(unexport)し . MAKE.EXPORTED からも削除する。 |
.unexport VAR ... (新) | グローバル変数 VAR ... を環境変数から削除(unexport) し、MAKE.EXPORTED からも削除する。 |
.unexport-env (新) | 全ての環境変数を削除(unexport)する。 |
.warning MSG (新) | makefile 名と行番号とともに "warning: MSG" を表示する。 |
コメントはハッシュ文字(#)で開始し改行まで続く。
スペシャルソース | 機能 |
---|---|
.EXEC | このターゲットのコマンドは常に実行される |
.IGNORE | このターゲットのコマンドのエラーを全て無視する。 全てのコマンドの前にダッシュ(-)を付加するのと同じ。 |
.MADE | このターゲットの全てのソースを up-to-date としてマーク。 つまり本当は out-of-date なソースでも再生成しない。 |
.MAKE | -n や -t オプションが指定されていてもこのターゲットの コマンドを強制的に実行する。再帰 make 用に使用する。 |
.NOPATH | このターゲットを探すのに .PATH を使わない。 |
.NOTMAIN | このターゲットは(最初に現れても)デフォルトターゲットに しない。 |
.OPTIONAL | ターゲットの生成方法が分からないとき、既存とみなす。 |
.PHONY | ターゲットは実際のファイルに対応しない。 常に out-of-date とみなされ、 -t オプション指定時も生成しない。 |
.PRECIOUS | make が中断しても作成中のターゲットを削除しない。 (通常は削除される) |
.RECURSIVE | .MAKE の別名 |
.SILENT | このターゲットのコマンドをエコーしない |
.USE | このターゲットをマクロにする。 別のターゲットがこのターゲットをソースにすると、 このターゲットのソース、コマンドが取り込まれる (末尾に追加される) |
.USEBEFORE | .USE と同じだが、.USE ターゲットのコマンドが 先頭に追加される(ソースは末尾に追加) |
.WAIT | .WAIT より前に記述されたソースは .WAIT より後ろに記述 されたソースより先に作られることが保証される。 |
スペシャル ターゲット | 機能 |
---|---|
.BEGIN | このターゲットは他の全てのターゲットより先に処理される。 |
.DEFAULT | 生成方法が分からな(依存関係行のない)ターゲットに 対するデフォルトのコマンド記述を提供。 コマンド実行時、.IMPSRC にターゲット名が設定される 疑問: .TARGET があるのに .IMPSRC は何のために? |
.END | このターゲットは他の全てのターゲットより後に処理される。 |
.ERROR | このターゲットのコマンド列は 他のターゲットが失敗したときに実行される。 失敗したターゲットは変数 .ERROR_TARGET に設定される。 |
.IGNORE | 各ソースに対して .IGNORE 属性をマークする。 ソースを省略したら -i オプションを指定したのと同じ。 |
.INTERRUPT | make が中断したとき、このターゲットのコマンドを実行。 |
.MAIN | make の引数でターゲットが未指定のとき、 このターゲットのソースをデフォルトターゲットとする。 (通常は最初に現れたターゲットがデフォルト) |
.MAKEFLAGS | このターゲットのソースが make の引数に指定されたものと みなす。但し -f オプションは除く。 |
.NOPATH | 各ソースに .NOPATH 属性を適用 |
.NOTPARALLEL | 並列モードを無効にする |
.NO_PARALLEL | .NOTPARALLEL の別名。他の pmake 変種との互換用。 |
.ORDER | ソースが記述した順序で作られることを保証 |
.PATH | 各ソースをファイルサーチパスの末尾に追加する。 ソースが未指定のときは今まで追加したパスを全て削除する。 ソースに .DOTLAST が含まれていると 初期値の . と ${.CURDIR} が強制的に末尾に置かれる。 メモ: .DOTLAST のとき期待通りのサーチ結果にならない。 |
.PHONY | 各ソースに .PHONY 属性を適用する |
.PRECIOUS | 各ソースに .PRECIOUS 属性を適用する。 ソースが未指定なら全ターゲットに適用される。 |
.SHELL | コマンド実行時に使用するシェルを設定する。 詳しくはマニュアルを参照。 |
.SILENT | 各ソースに .SILENT 属性を適用する。 ソースが未指定なら全てのコマンドを適用される。 |
.SUFFIXES | 各ソースをサフィックス変換ルールで使用されるサフィックス として登録。ソースが未指定ならば過去に登録された全ての サフィクスが削除される。 |
環境変数 | 機能 |
---|---|
MACHINE | 前述の「.OBJDIR 決定ルール」を参照。 |
MACHINE_ARCH | 不明 |
MAKE | 不明 |
MAKEFLAGS | make はコマンドライン引数をパーシングする前に この変数値をコマンドライン引数としてパーシングする。 そしてコマンドライン引数をこの変数値の末尾に追加する。 |
MAKEOBJDIR | 前述の「.OBJDIR 決定ルール」を参照。 |
MAKEOBJDIRPREFIX | 前述の「.OBJDIR 決定ルール」を参照。 |
MAKESYSPATH | sys.mk と .include <makefile> のサーチパス。 複数のパスはコロン(:)で区切る。 |
PWD | 正直よく分からん |
TMPDIR | 作業ファイルの生成先ディレクトリ |