MAKE(1) | FreeBSD General Commands Manual | MAKE(1) |
名称
make — プログラムの依存関係をメンテナンスする書式
make | [ -BeikNnqrstWwX][ -C directory][ -D variable][ -d flags][ -f makefile][ -I directory][ -J private][ -j max_jobs][ -m directory][ -T file][ -V variable][ variable=value][ target ...] |
解説
make は、他のプログラムのメンテナンスを単純化するように作られたプログラムです。その入力は、プログラムと依存する他のファイルに関するファイルについての指定のリストです。 -f makefile makefile のオプションが与えられないなら、 make は、指定のファイルを見つけるために‘makefile
’をオープンすることを試み、次に‘
Makefile
’をオープンすることを試みます。ファイル‘
.depend
’が存在するなら、読み込まれます (
mkdep(1) を参照)。
このマニュアルページは、リファレンスの文書としてのみを目的としています。 make と makefile のより完全な解説については、 PMake - A Tutorial を参照してください。
make は、引数を解析する前に、コマンド行の引数の前に MAKEFLAGS 環境変数の内容を追加します。
オプションは、次の通りです:
- -B
- コマンドごとに単一のシェルを実行することによって、そして依存関係の行のソースを順序どおりに make するコマンドを実行することによって、後方互換性となるようにします。
- -C directory
- makefile を読み込むか、または何も行わない前に、 directory に変更します。複数の -C オプションが指定されるなら、それぞれは、前のものと相対的に解釈されます: -C / -C etc は、 -C /etc と同等です。
- -D variable
- グローバルな文脈として variable を 1 に定義します。
- -d [-]flags
-
デバッギングをオンにし、
make のどの部分のデバッギング情報を印刷 (表示) するかを指定します。フラグが‘
-
’に先導されないなら、それらは、 MAKEFLAGS 環境変数に追加され、あらゆる子プロセスの make プロセスによっても処理されます。デフォルトで、デバッギング情報は、標準エラーに印刷 (表示) されますが、これは、 F デバッギングフラグを使用して変更することができます。デバッギング出力は、常にバッファリングされません。さらに、デバッギングが有効にされるが、デバッギング出力が標準出力にリダイレクトされないなら、標準出力は、行単位にバッファリングされます。 flags は、次の 1 つ以上です:- A
- 可能なすべてのデバッギング情報を印刷します。デバッギングフラグのすべてを指定することと同等です。
- a
- アーカイブ検索とキャッシングに関するデバッギング情報を印刷します。
- C
- 現在の作業ディレクトリに関するデバッギング情報を印刷します。
- c
- 条件式の評価に関するデバッギング情報を印刷します。
- d
- ディレクトリ検索とキャッシングに関するデバッギング情報を印刷します。
- e
- 失敗したコマンドとターゲットに関するデバッギング情報を印刷します。
- F[ +] filename
-
デバッギング出力が書き込まれる場所を指定します。これは、引数の残りを消費するので、最後のフラグでなければなりません。‘
F
’フラグの直後の文字が‘+
’であるなら、アペンド (追加) モードでオープンされます。そうでなければ、ファイルは、上書きされます。ファイル名が‘stdout
’または‘stderr
’であるなら、デバッギング出力は、それぞれ、標準出力または標準エラー出力ファイル記述子に書き込まれます‘+
’オプションは、効果がありません)。そうでなければ、出力は、指定されたファイルに書き込まれます。ファイル名が‘.%d
’で終るなら、‘%d
’は、pid と置き換えられます。 - f
- ループ評価に関するデバッギング情報を印刷 (表示) します。
- g1
- 何でも make する前に、入力グラフを印刷します。
- g2
- すべてを make した後、またはエラーで終了する前に、入力グラフを印刷します。
- g3
- エラーで終了する前に、入力グラフを印刷します。
- j
- 複数のシェルの実行することに関するデバッギング情報を印刷します。
- l
-
‘
@
’または他の "quiet" (静かな) フラグが前に付けられるかどうかにかかわらず Makefile 中のコマンドを印刷します。また、"loud" (うるさい) 振る舞いとして知られています。 - M
- ターゲットに関する "meta"モードの決定に関するデバッギング情報を印刷します。
- m
- 更新時刻を含んで、ターゲットを make することに関するデバッギング情報を印刷します。
- n
- コマンドを実行するとき、作成される一時的なコマンドスクリプトを削除しません。これらの一時的なスクリプトは、 TMPDIR 環境変数によって参照されるディレクトリか、または TMPDIR が設定されていないか、または空の文字列に設定されるなら、 /tmp で作成されます。一時的なスクリプトは、 mkstemp(3) によって作成され、形式 makeXXXXXX の名前があります。 注: これは、 TMPDIR または /tmp に多くのファイルを作成することができるので、注意して使用します。
- p
- makefile の解析に関するデバッギング情報を印刷します。
- s
- 接尾辞変換規則に関するデバッギング情報を印刷します。
- t
- ターゲットリストの維持管理に関するデバッギング情報を印刷します。
- V
- 変数の生 (raw) の値を印刷するために -V オプションを強制します。
- v
- 変数の割り当てに関するデバッギング情報を印刷します。
- w
- 入口と出口のディレクトリのメッセージ、前処理と後処理を印刷 (表示) します。
- x
- -x を付けてシェルコマンドを実行するので、実際のコマンドは、それらが実行されるように、印刷されます。
- -e
- 環境変数は、makefile 内のマクロの割り当てを上書きすることを指定します。
- -f makefile
-
デフォルトの‘
makefile
’の代わりに読み込む makefile を指定します。 makefile が‘-
’であるなら、標準入力が読み込まれます。複数の makefile が、指定されるかもしれず、指定された順序で読み込まれます。 - -I directory
- makefile とインクルードされる makefile を検索するディレクトリを指定します。システム makefile ディレクトリ (または、複数のディレクトリ) -m オプション参照) は、このリストの一部として自動的にインクルードされます。
- -i
-
makefile 中のシェルコマンドの 0 でない終了を無視します。 makefile 中の各コマンド行の前に、‘
-
’を指定することと同等です。 - -J private
-
このオプションは、ユーザによって指定されるべきでは
ありません。
j オプションが再帰的な構築で使用されているとき、過負荷のシステムを避けるために協力することを構築中のすべての make プロセスに許可を与えるために、このオプションは、make によって子プロセスに渡されます。
- -j max_jobs
- make がどの時点においても実行しているジョブの最大数を指定します。値は、 .MAKE.JOBS に保存されます。また、 B フラグが指定されないなら、互換モードは、オフにされます。互換モードがオフであるとき、ターゲットに関連したすべてのコマンドは、従来の 1 行ごとに 1 つのシェル呼び出しとは対照的に、単一のシェルの呼び出しで実行されます。これは、各コマンドの呼び出しでディレクトリを変更し、次に、次の行で新たな環境で開始することを期待する従来のスクリプトを壊すかもしれません。後方互換性をオンにするのではなくスクリプトを修正するほうが効率的です。
- -k
- エラーに遭遇した後に、処理を続けますが、その作成がエラーを引き起こしたターゲットに依存しないターゲットの場合のみです。
- -m directory
-
<
file>スタイルのインクルード文によってインクルードされる sys.mk と makefile を検索するためのディレクトリを指定します。検索パスを形成するために
-m オプションを複数回使用できます。このパスは、デフォルトのシステムのインクルードパス: /usr/share/mk を上書きします。さらに、システムのインクルードパスは、“
file”スタイルのインクルード文 (
-I オプションを参照) に使用される検索パスに追加されます。
-m 引数 (または、 MAKESYSPATH 環境変数) のファイルまたはディレクトリ名が、文字列“.../”で始まるなら、 make は、引数文字列の残りの部分で指定された、ファイルまたはディレクトリを検索します。検索は、Makefile の現在のディレクトリで開始し、次にファイルシステムのルートの上向きに動作します。検索が成功するなら、結果のディレクトリは、 -m 引数で指定された“.../”を置き換えます。使用されるなら、この機能によって、 make は、カスタマイズされた sys.mk ファイル (例えば、引数として“.../mk/sys.mk”を使用して) に対して現在のソースツリーで簡単に検索できます
- -n
- 実行されるであろうコマンドを表示しますが、ターゲットが .MAKE 特別ソースに依存しないなら、実際にそれらを実行しません (下記を参照)。
- -N
- 実行されるであろうコマンドを表示しますが、それらのどれも実際に実行しません。サブディレクトリに降りずに、トップレベルの makefile をデバッグするのに役に立ちます。
- -q
- なにもコマンドを実行しませんが、指定されたターゲットが最新であるなら、 0 で終了し、そうでなければ、1 で終了します。
- -r
- システム makefile で指定される組み込みの規則を使用しません。
- -s
-
それらが実行されるときに、あらゆるコマンドをエコーしません。 makefile の各コマンド行の前に‘
@
’を指定することと同等です。 - -T tracefile
- -j フラグとともに使用されるとき、開始され、完了した各ジョブのための tracefile にトレース記録を追加します。
- -t
- makefile で指定されるターゲットを再構築するのではなく、(touch コマンドのように) それを作成するか、または、それを最新にするために更新時刻を更新します。
- -V variable
-
グローバルな状況の
variable の値の
make の考え (idea) を印刷 (表示) します。あらゆるターゲットを構築しません。このオプションの複数のインスタンスが指定されます。変数は、ヌルまたは未定義の変数ごとに空行を付けて、1 行ごとに 1 つ印刷されます。
variable が‘
$
’を含んでいるなら、値は、印刷の前に展開されます。 - -W
- makefile の解析の間にあらゆる警告をエラーとして扱います。
- -X
- 環境変数に個別にコマンド行で渡された変数をエクスポートしません。コマンド行で渡された変数は、いまだに MAKEFLAGS 環境変数によってエクスポートされます。このオプションは、コマンドの引数のサイズに小さな制限があるシステムで役に立ちます。
- variable=value
- 変数 variable の値を value に設定します。通常、コマンド行に渡されたすべての値は、環境変数のサブ make にもエクスポートされます。 -X フラグは、この振る舞いを無効にします。変数の割り当ては、POSIX 互換性のためのオプションに従うべきですが、順序は、強制されません。
makefile には、次の 7 つの異なるタイプの行があります: ファイル依存関係、シェルコマンド、変数割り当て、インクルード文、条件式の指示、for ループとコメント。
一般的に、行は、バックスラッシュ (‘ \
’) でそれらを終了することによって、1 つの行から次の行に継続されます。続く行の後続する改行文字と最初の空白類は、単一の空白に押し込まれます。
ファイル依存関係指定
依存関係行は、1 つ以上のターゲット、演算子、と 0 個以上のソースで構成されます。これは、ターゲットがソースに“依存し”、通常、それらから作成されるところで、関係 (relationship) を作成します。ターゲットとソースの正確な関係 (relationship) は、それらを分離する演算子によって決定されます。 3 つの演算子は、次の通りです:- :
- ターゲットは、その更新時刻が、そのソースのいずれかのもの更新時刻未満であるなら、古いものとと見なされます。ターゲットのためのソースは、この演算子が使用されるとき、依存関係の行にわたって蓄積します。ターゲットは、 make が割り込まれるなら、削除されます。
- !
- ターゲットは、すべてのソースが検査され、必要に応じて再作成されないなら、常に再作成されます。ターゲットのためのソースは、この演算子が使用されるとき、依存関係の行にわたって蓄積します。ターゲットは、 make が割り込まれるなら、削除されます。
- ::
- ソースが指定されないなら、ターゲットは、常に再作成されます。そうでなければ、そのソースのいずれかがターゲットよりより最近修正されているなら、ターゲットは、古いと見なされます。ターゲットのためのソースは、この演算子が使用されるとき、依存関係の行にわたって蓄積しません。ターゲットは、 make が割り込まれるなら、削除されません。
ターゲットとソースは、シェルのワイルドカード値‘ ?
’, ‘ *
’, ‘ []
’と‘ {}
’を含むことができます。値‘ ?
’, ‘ *
’と‘ []
’は、ターゲットまたはソースの最後の構成要素の一部としてのみ使用され、既存のファイルを記述するために使用されなければなりません。値‘ {}
’は、既存のファイルを記述するために必ずしも使用される必要はありません。展開は、シェルで行われるように、アルファベット順にではなくディレクトリの順序になっています。
シェルコマンド
各ターゲットは、通常ターゲットを作成するために使用される、一連のシェルコマンドに関連されます。このスクリプト中のコマンドのそれぞれは、タブが前に付けられ なければなりません。あらゆるターゲットが依存関係の行に現われますが、‘::
’演算子が使用されないなら、これらの依存関係の 1 つだけに、作成スクリプトが続きます。
コマンド行の最初の文字が‘ @
’, ‘ +
’または‘ -
’のあらゆる組み合わせであるなら、コマンドは、特別に扱われます。‘ @
’コマンドによって、コマンドは、それが実行される前に、エコーされません。‘ +
’コマンドによって、コマンドは、 -n が与えられるときでさえ、実行されます。これは、スクリプトの単一の行に影響を制限できることを除いて、.MAKE の特別のソースの影響に似ています。‘ -
’コマンドによって、コマンド行のあらゆる 0 以外の終了ステータスは、無視されます。
make が -j max_jobs を付けたジョブモードで実行されるとき、ターゲットのためのすべてのスクリプトは、シェルの単一のインスタンスに与えられます。
互換性 (非ジョブ) モードで、各コマンドは、個別のプロセスで実行されます。コマンドが、いずれかのシェルのメタ文字 (‘ #=|^(){};&<>*?[]:$`\\n
’) を含んでいるなら、シェルに渡され、そうでなければ、 make は、直接実行を試みます。
make は、あらゆるターゲットを実行する前に、‘ .OBJDIR
’に chdir(2) するので、各子プロセスは、現在の作業ディレクトリにして開始します。
Makefile は、 make の操作のモードが、それらの振る舞いを変更しないように、書かれるべきです。例えば、副作用なしで、“cd”または“chdir”を使用する必要があるあらゆるコマンドは、括弧に入れられるべきです:
avoid-chdir-side-effects: @echo Building $@ in `pwd` @(cd ${.CURDIR} && ${.MAKE} $@) @echo Back in `pwd` ensure-one-shell-regardless-of-mode: @echo Building $@ in `pwd`; \ (cd ${.CURDIR} && ${.MAKE} $@); \ echo Back in `pwd`
変数代入
make の変数は、シェルの変数に非常に似ていて、伝統的に、すべて大文字で構成されます。変数代入修飾子
変数に値を代入するために使用することができる 5 つの演算子は、次の通りです:- =
- 変数に値を代入します。あらゆる前の値は、上書きされます。
- +=
- 変数の現在値に値を追加します。
- ?=
- それがまだ定義されないなら、変数に値を代入します。
- :=
- 展開して代入します、すなわち、変数にそれを代入する前に、値を展開します。通常、変数が参照されないなら、展開は、行われません。 注: 未定義の変数への参照は、展開 されません。これは、変数の修飾子が使用されるとき、問題を起こかもしれません。
- !=
- 値を展開し、実行のためにそれをシェルに渡し、変数に結果を代入します。結果のあらゆる改行は、空白と置き換えられます。
代入される value の前のあらゆる空白類は、削除されます。値が追加されるなら、単一の空白が、変数の前の内容と追加される値の間に挿入されます。
変数は、中括弧 (‘ {}
’) または括弧 (‘ ()
’) のいずれかで変数名で囲み、ドル記号 (‘ $
’) を前に付けることによって展開されます。変数名が単一の文字である場合のみ、中括弧または括弧を囲むことは、必要ではありません。この短い形式は、推奨されません。
変数名がドル記号を含んでいるなら、名前自体が最初に展開されます。これは、ほとんど任意の変数名を許可しますが、ドル記号、中括弧、括弧、または空白類を含んでいる名前は、実際により良く回避されます!
変数を展開した結果がドル記号 (‘ $
’) を含んでいるなら、文字列は、再び拡張されます。
変数の置換は、変数がどこで使用されているかに依存して、3 つの個別の時点で起こります。
- 依存関係の行の変数は、行が読み込まれるように、展開されます。
- シェルコマンドの変数は、シェルコマンドが実行されるとき、拡張されます。
- “.for”ループのインデックス変数は、各ループの繰り返しで展開されます。他の変数がループの内部で展開されないことに注意してください、それで、次の使用例のコードは:
.for i in 1 2 3 a+= ${i} j= ${i} b+= ${j} .endfor all: @echo ${a} @echo ${b}
は、次を印刷 (表示) します:
1 2 3 3 3 3
なぜなら、ループが実行された後に、${a} は、“1 2 3”を含んでいますが、${b} は、ループが完了した後に、${j} が、“3”を含んでいるので、“3 3 3”に展開される“${j} ${j} ${j}”を含んでいます。
変数クラス
変数の 4 つの異なるクラス (増加される優先の順序で) は、次の通りです:- 環境変数
- make の環境変数の一部として定義される変数。
- グローバル変数
- makefile またはインクルードされる makefile で定義された変数。
- コマンド行変数
- コマンド行の一部として定義される変数。
- ローカル変数
-
特定のターゲットに特有であると定義される変数。 7 つのローカル変数は、次の通りです:
- .ALLSRC
-
このターゲットのためのすべてのソースのリスト。また、‘
>
’として知られています。 - .ARCHIVE
- アーカイブファイルの名前。
- .IMPSRC
-
接尾辞の変換規則で、ターゲットが変換される (“暗黙”のソース) ソースの名前/パス。また、‘
<
’として知られています。それは、明示的な規則で定義されていません。 - .MEMBER
- アーカイブメンバの名前。
- .OODATE
-
古いと見なされる、このターゲットのためのソースのリスト。また、‘
?
’として知られています。 - .PREFIX
-
ファイルの部分だけを含み、接尾辞または先行するディレクトリの構成要素を含まない、ターゲットのファイルの接頭辞。また、‘
*
’として知られています。 - .TARGET
-
ターゲットの名前。また、‘
@
’として知られています。
短い形式‘
@
’, ‘?
’, ‘<
’, ‘>
’と‘*
’は、歴史的な makefile との後方互換性のために許可され、推奨されません。 6 つの変数‘@F
’, ‘@D
’, ‘<F
’, ‘<D
’, ‘*F
’と‘*D
’は、 AT&T System V UNIX の makefile との互換性のために許可され、推奨されません。ローカル変数の 4 つは、それらが、行の各ターゲットに対して適切な値に展開するので、依存関係の行のソースで使用されます。これらの変数は、‘
.TARGET
’, ‘.PREFIX
’, ‘.ARCHIVE
’と‘.MEMBER
’です。
追加の組み込み変数
さらに、 make は、次の変数に関して設定するか、または知っています:- $
-
単一のドル記号‘
$
’、すなわち、‘$$
’は、単一のドル記号に展開します。 - .ALLTARGETS
- Makefile で遭遇されるすべてのターゲットのリスト。 Makefile の解析の間に評価されるなら、これまで遭遇されたターゲットのみをリストします。
- .CURDIR
-
make が実行されたディレクトリへのパス。より詳しい情報については、‘
PWD
’の説明を参照してください。 - MAKE
- make が、 ( argv[0]) で実行された名前。また、互換性のために、 make は、同じ値に .MAKE を設定します。 make の他のバージョンとより互換性があり、同じ名前で特別のターゲットと混同することができないので、使用する好ましい変数は、環境変数 MAKE です。
- .MAKE.ALWAYS_PASS_JOB_QUEUE
-
たとえ、ターゲットが
.MAKE とタグ付けられなくても、ジョブトークンのキューの記述子を渡すべきかどうか
make に伝えます。デフォルトは、
FreeBSD 9.0 以前の後方互換性のために‘
yes
’です。 - .MAKE.DEPENDFILE
-
生成された依存関係が読み込まれる makefile (デフォルトは、‘
.depend
’) 指定する。 - .MAKE.EXPAND_VARIABLES
- -V オプションのデフォルトの振る舞いを制御するブール値。
- .MAKE.EXPORTED
- make によってエクスポートされる変数のリスト。
- .MAKE.JOBS
- -j オプションへの引数。
- .MAKE.JOB.PREFIX
-
make が
j をつけて実行されるなら、各ターゲットのための出力は、
.MAKE.JOB.PREFIX によって制御することができる最初の部分である、トークン‘
--- target ---
’が前に付けられます。 .MAKE.JOB.PREFIX が空であるなら、トークンは、印刷 (表示) されません。.MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}]
は、達成されている並列の度合を追跡することを簡単にする‘---make[1234] target ---
’のようなトークンを生成します。 - MAKEFLAGS
-
環境変数‘
MAKEFLAGS
’は、 make のコマンド行で指定されるあらゆるもの含んでいます。 make のコマンド行で指定されたあらゆるものは、その後、 make が実行するすべてのプログラムのために環境変数に入れられる‘MAKEFLAGS
’変数に追加されます。 - .MAKE.LEVEL
-
make のリカージョンの深さ。
make の最初のインスタンスは、0 で、増加された値は、次の生成によって見られる環境変数に入れられます。これは、次のようなテストを許可します:
make の最初のインスタンスでのみ評価されるべきものを保護するための
.if ${.MAKE.LEVEL} == 0
。 - .MAKE.MAKEFILE_PREFERENCE
-
make が検索する makefile 名 (デフォルトは、‘
makefile
’, ‘Makefile
’) の順序付けられたリスト。 - .MAKE.MAKEFILES
- 依存関係を追跡するのに役に立つ、 make によって読み込まれる makefile のリスト。各 makefile は、読み込まれた回数にかかわらず、一度だけ記録されます。
- .MAKE.MODE
-
すべての makefile を読み込んだ後に処理されます。
make が実行するモードに影響するかもしれません。多くのキーワードを含むことができます:
- compat
- -B のように、 make を "compat" (互換) モードにします。
- meta
- メタファイルがコマンド実行を捕獲するためにターゲットごとに作成され、 filemon(4) が利用可能であるなら、生成される出力、 make するために重要なシステムコールで、 make を "meta"モードにします。エラーを診断するとき、捕獲される出力を非常に役に立てることができます。
- curdirOk= bf
-
通常、
make は、‘
.CURDIR
’で .meta ファイルを作成しません。 bf を真 (True) を表す値に設定することによって、これを上書きすることができます。 - env
- デバッギングに関して、.meta ファイルに環境変数をインクルードするために役に立てることができます。
- verbose
- "meta"モードであるなら、構築されているターゲットに関する手掛かり (clue) を印刷します。構築が他で静かに実行されているなら、これは、役に立ちます。印刷されるメッセージの値は、次の通りです: .MAKE.META.PREFIX。
- ignore-cmd
- いくつかの makefile には、単純で安定していないコマンドがあります。このキーワードによって、ターゲットが "meta"モードで古いかどうかを判断するために、それらは、無視されます。また、 .NOMETA_CMP を参照してください。
- silent= bf
- bf が真 (True) であるなら、.meta ファイルが作成されるとき、ターゲット .SILENT をマークします。
- .MAKE.META.BAILIWICK
- "meta"モードで、 make によって制御されるディレクトリに一致する接頭辞のリストを提供します。 .OBJDIR の外側ですが、前述の専門領域 (bailiwick) 内で生成されたファイルが見つからないなら、現在のターゲットは、古いと見なされます。
- .MAKE.META.CREATED
- "meta"モードで、この変数は、更新されたすべてのメタファイルのリストを含んでいます。空でないなら、 .MAKE.META.FILES の処理を引き起こすために使用することができます。
- .MAKE.META.FILES
- "meta"モードで、この変数は、使用される (更新されて、されなくても) すべてのメタファイルのリストを含んでいます。依存関係の情報を抽出するためにメタファイルを処理するためにこのリストを使用することができます。
- .MAKE.META.IGNORE_PATHS
-
無視されるべきパス接頭辞のリストを提供します。なぜなら、内容は、時間とともに変更すると予想されるからです。デフォルトのリストは、次のものを含んでいます: ‘
/dev /etc /proc /tmp /var/run /var/tmp
’ - .MAKE.META.PREFIX
-
"meta verbose"モードで更新されたメタファイルごとに印刷されるメッセージを定義します。デフォルト値は、次の通りです:
Building ${.TARGET:H:tA}/${.TARGET:T}
- .MAKEOVERRIDES
-
‘
MAKEFLAGS
’の一部としてエクスポートできるように、この変数は、コマンド行で割り当てられた変数の名前を記録するために使用されます。この振る舞いは、makefile 内の‘.MAKEOVERRIDES
’に空の値を代入することによって無効にすることができます。‘.MAKEOVERRIDES
’に、それらの名前の追加することによって、makefile から特別の変数をエクスポートすることができます。‘MAKEFLAGS
’は、‘.MAKEOVERRIDES
’が修正されるときはいつでも再エクスポートされます。 - .MAKE.PATH_FILEMON
- make が filemon(4) のサポートで構築されたなら、これは、デバイスノードのパスに設定されます。これによって、makefile は、このサポートのためにテストすることができます。
- .MAKE.PID
- make のプロセス ID。
- .MAKE.PPID
- make の親プロセス ID。
- MAKE_PRINT_VAR_ON_ERROR
-
make がエラーのために停止するとき、‘
MAKE_PRINT_VAR_ON_ERROR
’で指定された、あらゆる変数の値と同様に、その名前と‘.CURDIR
’の値を印刷します。 - .newline
-
この変数は、その値として改行文字が単に代入されます。これによって、
:@ を使用する拡張は、空白ではなくループの繰り返しの間に改行を入れることができます。例えば、‘
MAKE_PRINT_VAR_ON_ERROR
’の印刷は、${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} のように行うことができるかもしれません。 - .OBJDIR
-
ターゲットが構築されるディレクトリへのパス。その値は、順番に、次のディレクトリに
chdir(2) を試みることによって、最初の一致を使用して決定されます:
- ${MAKEOBJDIRPREFIX}${.CURDIR}
(‘
MAKEOBJDIRPREFIX
’が環境変数で、またはコマンド行で設定されている場合のみ。) - ${MAKEOBJDIR}
‘
MAKEOBJDIR
’が環境変数で、またはコマンド行で設定されている場合のみ。) - ${.CURDIR}/obj.${MACHINE}
- ${.CURDIR}/obj
- /usr/obj/${.CURDIR}
- ${.CURDIR}
変数の展開は、それが使用される前の値で行なわれるので、
${.CURDIR:S,^/usr/src,/var/obj,}
のような式が使用されます。これは、‘
MAKEOBJDIR
’で特に役に立ちます。‘
.OBJDIR
’は、グローバル変数として makefile で修正されます。すべての場合に、 make は、‘.OBJDIR
’に chdir(2) し、あらゆるターゲットを実行する前に、‘PWD
’を、そのディレクトリに設定します。 - ${MAKEOBJDIRPREFIX}${.CURDIR}
- .PARSEDIR
-
解析されている現在の‘
Makefile
’のディレクトリへのパス。 - .PARSEFILE
-
解析されている現在の‘
Makefile
’の基本的な名前 (basename)。この変数と‘.PARSEDIR
’は、‘Makefiles
’が解析されている間のみ、両方とも設定されます。それらの現在の値を保持したいなら、展開で代入を使用して、変数に、それらを代入します: (‘:=。
’) - .PATH
-
make がファイルを検索するディレクトリのリストを表わす変数。検索リストは、変数ではなく、ターゲット‘
.PATH
’を使用して更新されるべきです。 - PWD
-
現在のディレクトリへの代替のパス。
make は、通常、‘
.CURDIR
’を getcwd(3) によって与えられる標準的なパスに設定します。しかしながら、環境変数‘PWD
’が設定され、現在のディレクトリへのパスが与えられるなら、 make は、代わりに‘.CURDIR
’に‘PWD
’の値を設定します。‘MAKEOBJDIRPREFIX
’が設定されるか、または‘MAKEOBJDIR
’が変数変換を含んでいるなら、この振る舞いは、無効にされます。‘PWD
’は、 make が実行するすべてのプログラムに対して‘.OBJDIR
’の値に設定されます。 - .TARGETS
- もしあれるなら、コマンド行で明示的に指定されたターゲットのリスト。
- VPATH
-
make がファイルを検索するディレクトリのコロン (“:”) で区切られたリスト。変数は、古い make プログラムとの互換性のためだけにサポートされ、代わりに、‘
.PATH
’を使用します。
変数修飾子
変数展開は、変数 (“word”が空白類で区切られた文字のシーケンスのところで) の各単語を選択するかまたは修正するために修正されるかもしれません。変数展開の一般的な形式は、次の通りです:
${variable[:modifier[:...]]}
各修飾子は、バックスラッシュ (‘ \
’) でエスケープできるコロンで始まります。
変数によって 1 組の修飾子を、次のように、指定することができます:
modifier_variable=modifier[:...]
${variable:${modifier_variable}[:...]}
この場合、それが参照される変数に現われなければならないので、 modifier_variable の最初の修飾子は、コロンで始まりません。 modifier_variable の修飾子のどれかがドル記号 (‘ $
’) を含んでいるなら、これらは、初期の展開を避けるために 2 つでなければなりません。
サポートされる修飾子は、次の通りです:
- :E
- その接尾辞で変数中の各単語を置き換えます。
- :H
- すべてのもので変数中の各単語を置き換えますが、最後の構成要素です。
- :M pattern
-
pattern と一致するそれらの単語だけを選択します。標準のシェルのワイルドカード文字 (‘
*
’, ‘?
’と‘[ ]
’) が使用されます。ワイルドカード文字は、バックスラッシュ (‘\
’) でエスケープされます。 - :N pattern
-
これは、‘
:M
’と同一ですが、 pattern に一致しないすべての単語を選択します。 - :O
-
変数中のすべての単語をアルファベット順に順序付けます。逆の順序で単語をソートするためには、修飾子の‘
:O:[-1..1]
’の組み合わせを使用します。 - :Ox
-
変数の単語をランダム化します。修正された変数を参照するごとに、結果は、異なります。そのような振る舞いを防ぐために、展開 (‘
:=
’) での代入を使用します。例えば、LIST= uno due tre quattro RANDOM_LIST= ${LIST:Ox} STATIC_RANDOM_LIST:= ${LIST:Ox} all: @echo "${RANDOM_LIST}" @echo "${RANDOM_LIST}" @echo "${STATIC_RANDOM_LIST}" @echo "${STATIC_RANDOM_LIST}"
は、次のものに似た出力を生成します:
quattro due tre uno tre due quattro uno due uno quattro tre due uno quattro tre
- :Q
- make の再帰的な呼び出しを通して安全に渡すことができるように、変数中のすべてのシェルのメタ文字を引用します。
- :R
- 変数中の各単語をすべてのもので置き換えますが、接尾辞以外です。
- :gmtime
- 値は、現在の gmtime(3) を使用して、 strftime(3) のための書式文字列です。
- :hash
- 値の 32 ビットのハッシュを計算して、16 進数の数字として、それをエンコード (コード化) します。
- :localtime
- 値は、現在の localtime(3) を使用する strftime(3) のための書式文字列です。
- :tA
- realpath(3) を使用して、変数を絶対パスに変換することを試みます、それが失敗するなら、値は、変更されません。
- :tl
- 変数を小文字に変換します。
- :ts c
- 変数中の単語は、通常、展開で空白によって区切られます。この修飾子は、分離記号 (separator) 文字を c に設定します。 c が省略されるなら、分離記号は、使用されません。 (8 進法の数値のコードを含む) 共通のエスケープは、予想通りに動作します。
- :tu
- 変数を大文字に変換します。
- :tW
-
値は、(多分、組み込まれた空白類を含んで) 単一の単語として扱われます。また、‘
:[*]
’を参照してください。 - :tw
-
値は、空白類によって区切られる単語のシーケンスとして扱われます。また、‘
:[@]
’を参照してください。 - :S/ old_string/ new_string/[ 1gW]
-
変数の値の最初に見つかる
old_string を
new_string で置き換えるように修正します。‘
g
’がパターンの最後のスラッシュに追加されるなら、各単語で見つかるものはすべて、置き換えれられます。‘1
’がパターンの最後のスラッシュに追加されるなら、最初の単語だけが影響されます。‘W
’がパターンの最後のスラッシュに追加されるなら、値は、(多分、組み込まれた空白類を含んで) 単一の単語として扱われます。 old_string がキャレット (‘^
’) で始まるなら、 old_string は、各単語の最初に固定されます。 old_string がドル記号 (‘$
’) で終るなら、各単語の終わりに固定されます。 new_string の内部で、アンパサンド (‘&
’) は、(あらゆる‘^
’または‘$
’なしで) old_string によって置き換えられます。あらゆる文字は、修飾子の文字列の部品に対して区切り文字 (delimiter) として使用できます。固定される文字 (^ と $)、アンパサンドと区切り文字は、バックスラッシュ (‘\
’) でエスケープされます。変数展開は、唯一の、バックスラッシュが、いつものように先行するドル記号がない、ドル記号 (‘
$
’) の展開を防ぐために使用されることを除いて、 old_string と new_string の両方の通常の内部に生じます。 - :C/ pattern/ replacement/[ 1gW]
-
:C 修飾子は、単純な文字列である代わりに、old と new 文字列が、正規表現 (
regex(3) を参照) の文字列
pattern と
ed(1) スタイルの文字列
replacement であることを除いて、ちょうど
:S 修飾子に似ています。通常、値の各単語のパターン
pattern で最初に見つかるものは、
replacement と置き換えられます。‘
1
’修飾子によって、置換は、多くても 1 つの単語に適応します。‘g
’修飾子によって、置換は、それが見つかる単語または複数の単語に生じるように検索パターン pattern と同数のインスタンスに適応します。‘W
’修飾子によって、値は、単一の単語 (多分、組み込まれた空白類を含んで) として扱われます。‘1
’と‘g
’は、直交することに注意してください。前者は、複数の単語が潜在的に影響されるかどうかを指定し、後者は、複数の置換が潜在的に各影響された単語内に生じることができるどうかを指定します。 - :T
- 変数中の各単語をその最後の構成用途と置き換えます。
- :u
- 隣接する複製の単語を ( uniq(1) のように) 削除します。
- :? true_string : false_string
-
.if 条件式として解析されるとき、(その値ではない) 変数名が真と評価するなら、その値として
true_string を返し、そうでなければ、
false_string を返します。変数名が式として使用されるので、:? は、変数名自体の後の最初の修飾子でなければなりません - もちろん、通常、変数の展開を含むでしょう。共通のエラーは、実際に、決定するために defined(NUMBERS) のテストが、何か次のようなものを使用する必要のある "42"と一致するあらゆる単語である、
${NUMBERS:M42:?match:no}
${"${NUMBERS:M42}" != "":?match:no}。
- :old_string=new_string
-
これは、 AT&T System V UNIX スタイルの変数置換です。それは、指定された最後の修飾子でなければなりません。
old_string または
new_string がパターンマッチング文字
% を含んでいないなら、それらが、各単語の終わりに固定されると仮定されるので、接尾子またはすべての単語だけが置き換えられます。そうでなければ、
% は、
new_string で置き換えられる
old_string のサブストリング (部分文字列) です。
変数展開は、唯一の、バックスラッシュが、いつものように先行するドル記号がない、ドル記号 (‘
$
’) の展開を防ぐために使用されることを除いて、 old_string と new_string の両方の内部の通常のやり方で生じます、 - :@ temp @ string @
-
これは、OSF Development Environment (開発環境) (ODE) の make からのループ拡張メカニズムです。
.for ループと異なり、ループ拡張は、参照の時に生じます。変数中の各単語に
temp を代入し、
string を評価します。 ODE 仕様は、
temp が期間で開始して終了するべきということです。例えば。
${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
しかしながら、単一文字の変数は、多くの場合より読み込み可能です:
${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
- :U newval
-
変数が未定義であるなら、
newval は、値です。変数が定義されているなら、既存の値が返されます。これは、別の ODE make の機能です。それは、例えば、ターゲットごとの CFLAGS を設定するために手軽です:
${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}}
${VAR:D:Unewval}
- :D newval
- 変数が定義されているなら、 newval は、値です。
- :L
- 変数の名前は、値です。
- :P
- 変数と同じ名前をあるノードのパスは、値です。そのようなノードが存在しないか、または、そのパスが null であるなら、変数の名前が使用されます。この修飾子が動作するために、名前 (ノード) は、少なくとも依存関係の rhs に現われなければなりません。
- :! cmd !
- 実行している cmd の出力は、値です。
- :sh
- 変数が空でないなら、コマンドとして実行され、出力は、新しい値になります。
- ::= str
-
変数は、置換の後に、値
str を代入されます。この修飾子とその変異は、シェルコマンドが解析されているとき、変数を設定したいような不明瞭な状況で役に立ちます。これらの代入の修飾子は、常に何にも展開しません、それら自体によって規則行に現われることが
make を満足し続ける何かで先行されるべきことです。
::= 形式が常に生じる置換は、曖昧に適当であるので、‘
::
’は、 AT&T System V UNIX スタイルの := 修飾子がある誤りのマッチを避けることを助けます。 - ::?= str
- ::= に関して、ただし、変数がまだ値がない場合のみです。
- ::+= str
- 変数に str を追加します。
- ::!= cmd
- 変数に cmd の出力を代入します。
- :[ range ]
-
値から 1 つ以上の単語を選ぶか、または値が単語に分割される方法と関係する他の操作を行ないます。
通常、値は、空白類によって区切られる単語のシーケンスとして扱われます。いくつかの修飾子が、この振る舞いを抑制することによって、値は、(多分、組み込まれた空白類を含んで) 単一の単語として扱われます。空の値、または完全に空白類から成る値は、単一の単語として扱われます。‘
:[]
’修飾子の目的について、単語は、正の整数 (ここで、インデックス 1 は、最初の単語を表わします) を使用して前方に、負の整数 (ここで、インデックス-1 は、最後の単語を表わします) 使用して後方の両方にインデックス付けられます。range は、変数展開され、次に、展開された結果は、次のように解釈されます:
- index
- 値から単一の単語を選択します。
- start .. end
-
包括的に
start から
end まで、すべての単語を選択します。例えば、‘
:[2..-1]
’は、2 番目の単語から最後の単語まですべての単語を選択します。 start が end より大きいなら、単語は、逆の順序で出力されます。例えば、‘:[-1..1]
’は、最後から最初まですべての単語を選択します。 - *
- 続く修飾子は、単一の単語 (多分、組み込まれた空白類を含んで) として値を扱います。 Bourne シェルの "$*"の効果と類似しています。
- 0
-
‘
:[*]
’と同じであることを意味します。 - @
- 続く修飾子は、空白類よって区切られた単語のシーケンスとして値を扱います。 Bourne シェルの "$@"の効果と類似しています。
- #
- 値の中の単語の数を返します。
インクルード文、条件式と FOR ループ
Makefile のインクルード、条件式の構造、と C プログラミング言語を連想する for ループは、 make で提供されています。すべてのそのような構造は、単一のドット (‘.
’) 文字で始まる行で識別されます。ファイルは、
.include <
file>または
.include "
file"のいずれかでインクルードされます。山括弧またはダブルクォートの間の変数は、ファイル名を形成するために展開されます。山括弧が使用されるなら、インクルードされる makefile は、システムの makefile ディレクトリにあると見なされます。ダブルクォートが使用されるなら、インクルードされている makefile のディレクトリと
-I オプションを使用して指定されたあらゆるディレクトリは、システムの makefile ディレクトリの前に、検索されます。
make の他のバージョンとの互換性のために、‘
include file ...
’も受け付けられます。インクルード文が
.-include または
.sinclude のように書き込まれるなら、エラーの位置および開始のインクルードファイルは、無視されます。
条件式も行の最初の文字として単一のドットが先行します。指定できる条件式は、次の通りです:
- .error message
- メッセージは、makefile の名前と行番号とともに印刷され、次に、 make は、終了します。
- .export variable ...
-
指定されたグローバル変数をエクスポートします。変数のリストが提供されないなら、 (‘
.
’で始まる) 内部変数を除いて、すべてのグローバルは、エクスポートされます。これは、 -X フラグによって影響されません、したがって、注意して使用されるべきです。他の make プログラムとの互換性のために、‘export variable=value
’も受け付けられます。.MAKE.EXPORTED に変数名を追加することは、変数のエクスポートと同様です。
- .export-env variable ...
-
変数が
.MAKE.EXPORTED に追加されないことを除いて、‘
.export
’と同じです。これによって、値は、 make によって内部に使用されるものとは、異なる環境にエクスポートすることができます。 - .info message
- メッセージは、makefile の名前と行番号とともに印刷されます。
- .undef variable
- 指定されたグローバル変数を未定義とします。グローバル変数だけが未定義とされます。
- .unexport variable ...
-
‘
.export
’の反対。指定されたグローバル変数 variable は、 .MAKE.EXPORTED から削除されます。変数のリストが提供されないなら、すべてのグローバルは、エクスポートを取り消し、 .MAKE.EXPORTED は、削除されます。 - .unexport-env
-
以前にエクスポートされたすべてのグローバルのエクスポートを取り消し、親から継承された環境をクリアします。この操作は、オリジナルの環境のメモリリークを引き起こすので、慎重に使用されるべきです。 0 である
.MAKE.LEVEL のためにテストは、意味があります。また、親の環境を起源とするあらゆる変数は、必要なら、明示的に保存されるるべきであることに注意してください。例えば:
.if ${.MAKE.LEVEL} == 0
PATH := ${PATH}.unexport-env
.export PATH
.endif
最小の役に立つ環境である、単に‘
PATH
’を含んでいる環境の結果となります。また、実際に、‘.MAKE.LEVEL
’は、新しい環境にプッシュ (push) されます。 - .warning message
-
‘
warning:
’が前に付けられたメッセージは、makefile の名前と行番号ともに印刷されます。 - .if [ !] expression [ operator expression ...]
- 式の値をテストします。
- .ifdef [ !] variable [ operator variable ...]
- 変数の値をテストします。
- .ifndef [ !] variable [ operator variable ...]
- 変数の値をテストします。
- .ifmake [ !] target [ operator target ...]
- 構築されているターゲットをテストします。
- .ifnmake [ !] target [ operator target ...]
- 構築されているターゲットをテストします。
- .else
- 最後の条件式の意味を逆にします。
- .elif [ !] expression [ operator expression ...]
-
‘
.if
’が後続する‘.else
’の組み合わせ。 - .elifdef [ !] variable [ operator variable ...]
-
‘
.ifdef
’が後続する‘.else
’の組み合わせ。 - .elifndef [ !] variable [ operator variable ...]
-
‘
.ifndef
’が後続する‘.else
’の組み合わせ。 - .elifmake [ !] target [ operator target ...]
-
‘
.ifmake
’が後続する‘.else
’の組み合わせ。 - .elifnmake [ !] target [ operator target ...]
-
‘
.ifnmake
’が後続する‘.else
’の組み合わせ。 - .endif
- 条件式の本体の終り。
operator (演算子) は、次のうちいずれかの 1 つです:
- ||
- 論理和 (OR)。
- &&
- “||”より高い優先順序の論理積 (AND)。
C でのように、 make は、その値を決定するために必要である限り、単に条件式を評価します。括弧は、評価の順序を変更するために使用されます。ブール演算子‘ !
’は、すべての条件式を論理的に否定するために使用されます。それは、‘ &&
’より高い優先順序です。
expression (式) の値は、次のいずれかです:
- defined
- 引数として変数名を取り、変数が定義されているなら、真と判断します。
- make
- 引数としてターゲット名を取り、ターゲットが make のコマンド行の一部として指定されたか、または条件式を含んでいる行の前にデフォルトのターゲット (暗黙に、または明示的に、 .MAIN) を参照) を宣言されたなら、真と判断します。
- empty
- 指定できる修飾子と共に変数を取り、変数の展開が空の文字列の結果となるなら、真と判断します。
- exists
- 引数としてファイル名を取り、ファイルが存在するなら、真と判断します。ファイルは、システム検索パスで ( .PATH を参照) 検索されます。
- target
- 引数としてターゲット名を取り、ターゲットが定義されているなら、真と判断します。
- commands
- 引数としてターゲット名を取り、ターゲットが定義されており、それに関連するコマンドがあるなら、真と判断します。
また、 expression (式) は、算術式または文字列の比較となります。変数展開は、整数値が比較される後に、比較の両側で行なわれます。値は、0x が先行するなら、16 進数として解釈され、そうでなければ、 10 進数と解釈されます。 8 進数は、サポートされていません。標準 C 関係演算子は、すべてサポートされています。変数展開の後に、‘ ==
’または‘ !=
’演算子の左側または右側のいずれかが、整数値でないなら、文字列の比較は、展開された変数の間で行なわれます。関係演算子が与えられないなら、展開された変数が 0 または文字列の比較の場合に空の文字列と比較されると仮定されます。
make がこれらの条件式の 1 つを評価していて、認識しない (空白類で分離された) 単語に遭遇するなら、“make”または“defined”式のいずれかは、条件式の形式に依存して、それに適用されます。形式が‘ .ifdef
’, ‘ .ifndef
’または‘ .if
’であるなら、“defined”式が適用されます。同様に、形式が‘ .ifmake
’または‘ .ifnmake
’であるなら、“make”式が適用されます。
条件式が真と判断されるなら、これまでのように、makefile の解析は、続きます。それが、偽と判断されるなら、次の行は、スキップされます。いずれにしても、これは、‘ .else
’または‘ .endif
’が見つかるまで、続きます。
for ループは、一般的にファイルのリストに 1 組の規則を適用するために使用されます。 for ループの構文は、次の通りです:
- .for variable [ variable ...] in expression
- <make-rules>
- .endfor
for expression (式) が評価される後に、それは、単語に分割されます。ループの各繰り返しにおいて、1 つの単語が取られ、各 variable (変数) に順番に代入されます、これらの variables (変数) は、for ループの本体の内側の make-rules に置換されます。単語の数は、偶数の結果とならなければなりません。すなわち、3 つの繰り返し変数があるなら、提供される単語の数は、 3 の倍数でなければなりません。
コメント
コメントは、シェルのコマンド行でないあらゆる場所で、ハッシュ (‘#
’) 文字で始まり、エスケープされていない新しい行の終りに続きます。
特殊ソース (属性)
- .EXEC
- ターゲットは、決して古くありませんが、とにかく常に、コマンドを実行します。
- .IGNORE
-
あたかもダッシュ (‘
-
’) が先行するかのように、このターゲットに関連したコマンドのあらゆるエラーを無視します。 - .MADE
- 最新のこととして、このターゲットのすべてのソースをマークします。
- .MAKE
- たとえ、 -n または -t オプションが指定されたとしても、このターゲットに関連したコマンドを実行します。通常、再帰的な make をマークするために使用されます。
- .META
- たとえ、 .PHONY, .MAKE または .SPECIAL としてフラグが付けられても、ターゲットのためのメタファイルを作成します。 .MAKE と連動する使用法が、最もあり得る場合です。 "meta"モードで、ターゲットは、メタファイルが見つからないなら、古いものです。
- .NOMETA
- ターゲットのためのメタファイルを作成しません。また、メタファイルは、 .PHONY, .MAKE または .SPECIAL に対しても作成されません。
- .NOMETA_CMP
-
ターゲットが古いかどうか決定するとき、コマンドの違いを無視します。これは、コマンドが常に変更される値を含んでいるなら、役に立ちます。コマンドの数が変わるなら、それでも、ターゲットは、まだ古くなっています。同じ効果は、次のように、そうでなければ必要でなかったときでさえ、その目的のために使用することができる、変数
.OODATE を使用するあらゆるコマンド行に適用します:
skip-compare-for-some: @echo this will be compared @echo this will not ${.OODATE:M.NOMETA_CMP} @echo this will also be compared
:M パターンは、望まれない変数のあらゆる式を抑制します。
- .NOPATH
- .PATH によって指定されたディレクトリのターゲットを検索しません。
- .NOTMAIN
- 通常、 make は、ターゲットが指定されなかったなら、構築されるデフォルトのターゲットとして、最初に遭遇するターゲットを選択します。このソースは、このターゲットが選択されることを防ぎます。
- .OPTIONAL
- ターゲットがこの属性でマークされ、 make が、それを作成する方法を見つけ出すことができないなら、この事実を無視し、ファイルが必要でないか、またあ既に存在すると仮定します。
- .PHONY
- ターゲットは、実際のファイルに対応しません。それは、常に、古いと見なされ、 -t オプションで作成されません。接尾辞変換規則は、 .PHONY ターゲットに適用されません。
- .PRECIOUS
- make が割り込まれるとき、通常、あらゆる部分的に作成されたターゲットを削除します。このソースは、ターゲットが削除されることを抑制します。
- .RECURSIVE
- .MAKE と同意語。
- .SILENT
-
あたかもアットマーク (‘
@
’) が先行するかのように、このターゲットに関連したあらゆるコマンドをエコーしません。 - .USE
- ターゲットを make のマクロのバージョンに変えます。ターゲットが別のターゲットのためのソースとして使用されるとき、別のターゲットは、コマンド、ソースとソースの属性 ( .USE を除いて) を獲得します。ターゲットに既にコマンドがあるなら、 .USE ターゲットのコマンドは、それらに追加されます。
- .USEBEFORE
- .USE とまったく同じようですが、ターゲットへの .USEBEFORE ターゲットコマンドを先頭に追加します。
- .WAIT
-
.WAIT が依存関係の行に現われるなら、それに先行するソースは、行のそれに続くソースの前に行われます。ファイルそれ自体が作成されるまで、ファイルの依存関係は、作られないので、これは、それらが依存関係のツリーの別のブランチのために必要とされないなら、構築されている依存関係も停止します。それで、次のように与えられます:
x: a .WAIT b echo x a: echo a b: b1 echo b b1: echo b1
出力は、常に‘
a
’, ‘b1
’, ‘b
’, ‘x
’です。.WAIT によって課された順序は、並列の make のために単に適切です。
特殊ターゲット
特別のターゲットは、他のターゲットに含まれていません、すなわち、それらは、指定されたターゲットのみでなければなりません。- .BEGIN
- このターゲットにアタッチされるあらゆるコマンド行は、他のあらゆるものが終了する前に、実行されます。
- .DEFAULT
- これは、 make が、作成する他の方法を見つけ出すことができない、あらゆるターゲット (それは、ソースとしてのみ使用された) のための .USE 規則のようなものです。シェルスクリプトだけが使用されます。 .DEFAULT のコマンドを継承するターゲットの .IMPSRC 変数は、ターゲット自体の名前に設定されます。
- .END
- このターゲットにアタッチされたあらゆるコマンド行は、他のすべてのもの行われた後に、実行されます。
- .ERROR
- このターゲットにアタッチされたあらゆるコマンド行は、別のターゲットが失敗するとき、実行されます。 .ERROR_TARGET 変数は、失敗したターゲットに設定されます。 MAKE_PRINT_VAR_ON_ERROR も参照してくだい。
- .IGNORE
- .IGNORE の属性でそれぞれのソースをマークします。ソースが指定されないなら、これは、 -i オプションを指定することと同等です。
- .INTERRUPT
- make が割り込まれるなら、このターゲットのためのコマンドは、実行されます。
- .MAIN
- make が呼び出されるとき、ターゲットが指定されなければ、このターゲットが構築されます。
- .MAKEFLAGS
- このターゲットは、makefile が使用されるとき、 make のためのフラグを指定する方法を提供しています。フラグは、あたかもシェルにタイプされるかのようですが、 -f オプションは、効果がありません。
- .NOPATH
- あらゆる指定されたソースに .NOPATH 属性を適用します。
- .NOTPARALLEL
- 並列モードを無効にします。
- .NO_PARALLEL
- 他の pmake の変異型との互換性のための .NOTPARALLEL と同意語。
- .ORDER
-
指定されたターゲットは、順序どおりに作成されます。この順序は、ターゲットを作成されるターゲットのリストに追加しません。ターゲットの依存関係は、ターゲットそれ自体が構築することができるまで、取得されないので、‘
a
’が依存関係のグラフの別の部分によって構築されないなら、次は、依存関係のループです:.ORDER: b a b: a
.ORDER によって課される順序は、並列の make のためだけに適切です。
- .PATH
- ソースは、カレントディレクトリで見つからないファイルを検索されることになっているディレクトリです。ソースが指定されないなら、あらゆる以前に指定されたディレクトリは、削除されます。ソースが特別の .DOTLAST ターゲットであるなら、現在の作業ディレクトリは、最後に検索されます。
- .PATH. suffix
- .PATH に似ていますが、特別の接尾辞があるファイルにのみに適応します。接尾辞は、以前は .SUFFIXES で宣言されなければなりませんでした。
- .PHONY
- あらゆる指定されたソースに .PHONY 属性を適用します。
- .PRECIOUS
- あらゆる指定されたソースに .PRECIOUS 属性を適用します。ソースが指定されないなら、 .PRECIOUS 属性は、ファイル中のすべてのターゲットに適用されます。
- .SHELL
-
make がコマンドを実行するために使用するシェルを設定します。ソースは、1 組の
field=value ペアです。
- name
- これは、組み込みのシェル仕様の 1 つを選択するために使用される、最小の仕様書です。 sh, ksh と csh。
- path
- シェルへのパスを指定します。
- hasErrCtl
- シェルがエラーで終了をサポートしているかどうかを示します。
- check
- エラーチェックをオンにするコマンド。
- ignore
- エラーチェックを無効にするコマンド。
- echo
- 実行されたコマンドのエコーをオンにするコマンド。
- quiet
- 実行されたコマンドのエコーをオフにするコマンド。
- filter
- quiet コマンドを発行した後に、フィルタリングする出力。それは、通常、 quiet と同一です。
- errFlag
- エラーチェックを有効にするシェルに渡すフラグ。
- echoFlag
- コマンドのエコーを有効にするシェルに渡すフラグ。
- newline
- 任意の引用する文字の外部で使用されるとき、単一の改行文字の結果となるシェルに渡す文字列のリテラル。
.SHELL: name=ksh path=/bin/ksh hasErrCtl=true \ check="set -e" ignore="set +e"\ echo="set -v" quiet="set +v" filter="set +v"\ echoFlag=v errFlag=e newline="'\n'"
- .SILENT
- あらゆる指定されたソースに .SILENT 属性を適用します。ソースが指定されないなら、 .SILENT 属性は、ファイル中のすべてのコマンドに適用されます。
- .STALE
- このターゲットは、その依存関係のファイルの名前に設定する .ALLSRC がある、依存関係のファイルが古くなったエントリを含んでいるとき、実行状態になります。
- .SUFFIXES
-
各ソースは、
make への接尾辞を指定します。ソースが指定されないなら、あらゆる以前に指定された接尾辞は、削除されます。それは、接尾辞変換規則の生成を許可します。
使用例:
.SUFFIXES: .o .c.o: cc -o ${.TARGET} -c ${.IMPSRC}
環境変数
make は、それらが存在するなら、次の環境変数を使用します: MACHINE, MACHINE_ARCH, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, MAKESYSPATH, PWD と TMPDIR。 MAKEOBJDIRPREFIX と MAKEOBJDIR は、makefile の変数としてではなく、 make への環境変数またはコマンド行でのみ設定されます。より詳しい情報については、‘ .OBJDIR
’の説明を参照してください。
関連ファイル
- .depend
- 依存関係のリスト
- Makefile
- 依存関係のリスト
- makefile
- 依存関係のリスト
- sys.mk
- システム makefile
- /usr/share/mk
- システム makefile のディレクトリ
互換性
基本的な make の構文は、make の異なるバージョンの間で互換性がありますが、特別な変数、変数の修飾子と条件式は、そうではありません。並列に make を行う方法は、.ORDER と .WAIT が依存関係に再帰的に適用できるように、 NetBSD 4.0 で変更される予定です。使用されるアルゴリズムは、今後、再び変更するかもしれません。
まだ変数展開であるように思えることができるように、.for ループ変数である方法は、 NetBSD 5.0 の後に変更される予定です。特に、これは、構文として扱われているそれらを停止し、.if ステートメントで、それらを使用して、いくつかの不明瞭な問題を取り除きます。
関連項目
mkdep(1)歴史
make コマンドは、 Version 7 AT&T UNIX で登場しました。この make の実装は、Berkeley の Sprite のために書かれた、 Adam De Boor の pmake プログラムに基づいています。それは、“customs”と呼ばれるデーモンを使用して、異なるマシンでジョブを実行する並列に分散される make となるように設計されています。歴史的に、ターゲット/依存性“FRC”は、(ターゲット/依存性は、存在しないので ... 誰も“FRC”ファイルを作成しないなら) FoRCe の再構築するために使用されていました。
バグ
make の構文は、データを実際に動作せずに解析することは困難です。例えば、変数の使用の終りを見つけることは、各フィールドのための正確な終端子を使用する修飾子を、それぞれスキャンすることを含んでいるべきです、多くの場所で、 make は、変数展開の終りを見つけるために順番に {} と () を単にカウントします。ファイル中の空白文字をエスケープ (escape) する方法はありません。
August 11, 2013 | FreeBSD |