MAKE
Section: User Commands (1)
索引
jman
BSD mandoc
索引
名称
make
- プログラムの依存関係をメンテナンスする
索引
書式
[-BPSXeiknqrstv
]
[-C directory
]
[-D variable
]
[-d flags
]
[-E variable
]
[-f makefile
]
[-I directory
]
-words
[-j max_jobs
]
[-m directory
]
[-V variable
]
[variable = value
]
[target ...
]
索引
解説
ユーティリティは、プログラムのメンテナンスを単純化するためのツールです。
その入力はファイルの生成とプログラムとの間の依存関係を指定する
リストが記述されています。
カレントディレクトリまたは特別なオブジェクトディレクトリ
( .OBJDIR
参照)
のどちらか一方において
BSDmakefile
makefile
Makefile
の最初に見つかった方から、この指定のリストが読み込まれます。
.depend
というファイルが見つかれば、それも読み込みます
( mkdep(1)
を参照)。
本マニュアルはリファレンスのためのみのドキュメントです。
と makefile に関する詳しい紹介は
"Make - A Tutorial"
を参照してください。
オプションは以下のとおりです。
- -B
-
シーケンス中の依存行のソースを作成するために、各コマンドに対して
1 つのシェルを実行する、バックワード互換モードで実行しようとします。
このオプションは
-j
が使用されない限り、デフォルトで有効になります。
- -C directory
-
makefile の読み取りや他のなにかをする前に、
directory
へ移動します。
複数の
-C
が指定された場合、それぞれは、直前のものに対する相対として解釈されます。
-C / -C etc
は
-C /etc
と等価です。
- -D variable
-
大域変数
variable
を 1 と定義します。
- -d flags
-
デバッグモードを有効にし、
が表示するデバッグ情報の種類を指定します。
引数
flags
には、以下のうち 1 つ以上を指定できます。
- A
-
すべてのデバッグ情報を出力します。
他のフラグをすべて指定したことと等価です。
- a
-
アーカイブ検索とキャッシュに関する情報を表示します。
- c
-
条件評価に関する情報を表示します。
- d
-
ディレクトリ検索とキャッシュに関する情報を表示します。
- f
-
for ループの実行に関するデバッグ情報を表示します。
- g1
-
処理を行う前に、入力のグラフを表示します。
- g2
-
すべての処理を行ったあと、あるいはエラーにより終了する前に入力のグラフを
表示します。
- j
-
複数のシェルを起動する場合の情報を表示します。
- l
-
@ がコマンドに前置されていようといまいと、
また他の「静寂」フラグの有無に関わらず、Makefile のコマンドを表示します。
これは「やかましい」動作としても知られています。
- m
-
ターゲットの作成と変更日付に関する情報を表示します。
- s
-
拡張子解釈に関する情報を表示します。
- t
-
ターゲットリストのメンテナンスに関する情報を表示します。
- v
-
変数の値に関する情報を表示します。
- -E variable
-
(存在すれば) 環境の値で上書きする、makefile の中の変数を指定します。
- -e
-
環境の値で makefile 中のすべての変数の値を上書きするように指示します。
- -f makefile
-
デフォルトの
makefile
と
Makefile
のかわりに、読み込むファイルを指定します。
もし
makefile
が
`-
'
なら標準入力から読み込みます。
複数のファイルが指定可能で、指定した順に読み込まれます。
- -I directory
-
makefile と、インクルードされる makefile を検索するためのディレクトリを
指定します。
システムで定義してある makefile のあるディレクトリ (または、
複数のディレクトリ;
-m
オプションを参照) は自動的にリストに含まれ、検索されます。
- -i
-
makefile から実行されたシェルコマンドが 0 でない終了ステータスを
返しても無視します。
makefile 中でコマンドの先頭に
`-
'
を指定するのと同じです。
- -j max_jobs
-
が同時に起動できるジョブの数を指定します。
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
-
グローバルな文脈での
の
variable
の値を表示します。如何なるターゲットも生成しません。
このオプションで複数のインスタンスを指定することができます。
変数は、各行ごとに表示されます。
未定義もしくは空の変数は、空行で
表現されます。
- -v
-
特に冗長表示させます。
複数ジョブの make においては、ファイルバナーを生成させます。
- -X
-
-V
オプションを使用して変数の値を表示するときに、再帰的な値の展開をしません。
- variable = value
-
変数
variable
の値を
value
に設定します。
makefile には 7 種類の行があります: 依存関係記述、シェルコマンド、変数
代入、インクルード文、条件命令、for ループ、コメントです。
一般に、行は行末にバックスラッシュ
(`\'
)
を置くことにより次行へ継続させることができます。
この場合、バックスラッシュ直後の改行と、次の行の先頭の
空白部分は 1 つの空白に置き換えられます。
索引
ファイル依存関係記述
入力ファイルにおける依存関係記述行は、1 つ以上のターゲット、オペレータ、
0 個 以上のソースからなります。
これは、ターゲットがソースに
``依存''
しているという関係を
定義しており、通常は、ソースからターゲットが作成されます。
ターゲットと
ソースとの厳密な関係はオペレータによって、両者間に指定します。
オペレータには以下の種類があります。
- :
-
ターゲットの最終更新日付が、いずれかのソースの最終更新日付よりも
古いものであれば、ターゲットは古いものであり、作り直されるべきものと
判断されます。
別の行でこのオペレータによる同じターゲットに関するソースの記述があれば、
それらはすべて 1 つにまとめられます。
ターゲットの作成中に
が中断されると、ターゲットは削除されます。
- !
-
ターゲットはつねに作り直されます。
ただし、作り直されるのは、
すべてのソースが検査され、必要と判断されたソースが作り直されたあとです。
このオペレータによる同じターゲットに関するソースの記述が別の行にもあれば、
それらはすべて 1 つにまとめられます。
ターゲットの作成中に
が中断されると、ターゲットは削除されます。
- ::
-
ソースが指定されていなかった場合、つねにターゲットは作り直されます。
指定されていた場合にはソースのいずれかがターゲットよりも新しい時だけ
ターゲットは作り直されます。
本オペレータでは、別の行において同じ
ターゲットに関するソースの記述があっても 1 つにまとめません。
ターゲットの作成中に
が中断されても、ターゲットは削除されません。
ターゲットとソースは、シェルのワイルドカード表記として
`?'
,
`*'
,
`[]'
,
`{}'
を含むことができます。
`?'
,
`*'
,
`[]'
の表記は、ターゲットまたはソースの最後の要素として記述でき、
存在するファイルを指定するものでなければなりません。
表記
`{}'
はファイルが存在しなくてもかまいません。
シェルのように辞書順に並べられて
展開されることはなく、ファイルシステム上に並んでいる順番のまま行われます。
索引
シェルコマンド
ターゲットは、シェルコマンドの列と関連付けることができ、通常はそれによって
ターゲットを作成します。
これに含まれる各コマンドは、
必ず
行頭のタブに続けて記述します。
同一のターゲットに
対して複数の依存記述行がある場合、
`::
'
オペレータを使用したのでなければ、それらのうちの 1 つにのみコマンド行を
続けることができます。
コマンドラインの先頭の文字が
`@
'
`-
'
`+
'
のいずれか
ならば、コマンドは特別な扱いを受けます。
`@
'
は、コマンド実行前のコマンド内容表示を抑制します。
`-
'
は、コマンドの 0 ではない終了ステータスを無視するように指示します。
`+
'
は、たとえ
-n
がコマンドラインで指定されていたとしても、
コマンドを実行するようにします。
索引
変数代入
で使われる変数はシェルでの変数に類似しています。
そして、歴史的な経緯から、すべて大文字からなる名前が用いられます。
変数代入には以下の 5 通りのオペレータを使用できます。
- =
-
変数に値を代入します。その時点までの値は失われます。
- +=
-
現在の変数の値に、右辺の値を追加します。
- ?=
-
変数が未定義の場合のみ、値を代入します
- :=
-
右辺を展開した値を代入します。つまり、変数に代入する前に値の展開を行います。
通常、値の展開は代入時には行われず、変数が参照されるときに行われます。
- !=
-
右辺を展開した値をシェルに実行させ、実行結果を左辺の変数に代入します。
結果のなかに含まれる改行は空白に置き換えられます。
いずれの場合も、値の前にある空白は無視されます。
値が追加される場合、
変数の直前の値と追加する値との間に空白が挿入されます。
変数は、ドル記号
(`$'
)
に続いて中括弧
(`{}'
)
または小括弧
(`()'
)
で囲まれた変数名を置くことにより展開されます。
もし変数名が 1 文字なら、変数名を囲む括弧は省略できますが、
このような省略形は推奨できません。
変数置換は、変数が用いられている場所により、 2 つの別々のタイミングで
行われます。
依存関係記述行で用いられた変数は、その行が読み込まれたときに
展開されます。
シェルコマンド内で用いられた変数は、シェルコマンド実行時に
展開されます。
変数には、優先度に従って、4 つの異なるクラスがあります:
- 環境変数
-
の環境中で有効な変数
- グローバル変数
-
makefile とインクルードされた makefile 内で有効な変数。
- コマンドライン変数
-
コマンドラインの中で指定された変数、および、
MAKEFLAGS
環境変数または
.MAKEFLAGS
ターゲットから取得した変数。
- ローカル変数
-
あるターゲットのみに対して定義される変数。
ローカル変数には、以下の 7 種類があります:
- .ALLSRC
-
このターゲットに対するすべてのソースのリスト。
`>
'
も同じです。
- .ARCHIVE
-
アーカイブファイル名。
`!
'
も同じです。
- .IMPSRC
-
ターゲット名に変換するのに使用するソースのファイル名またはパス名
(
``暗黙の''
ソース)。
`<
'
も同じです。
- .MEMBER
-
アーカイブのメンバ。
`%
'
も同じです。
- .OODATE
-
ターゲットよりも新しいソースのリスト。
`?
'
も同じです。
- .PREFIX
-
ターゲットのディレクトリ名と拡張子を取り除いた名前。
`*
'
も同じです。
- .TARGET
-
ターゲットの名前。
`@
'
も同じです。
短い形式
`@
'
`!
'
`<
'
`%
'
`?
'
`>
'
`*
'
は互換性のためのものですが、利用することは推奨できません。
また、
`@F
'
`@D
'
`<F
'
`<D
'
`*F
'
`*D
'
は
AT&T System
V
の makefile との互換性のために存在していますが、利用することは
推奨できません。
次の 4 つのローカル変数は依存関係記述行のソースに使うことができます。
これらは、その行のターゲット毎の値に展開されます。
これらのローカル変数は
.TARGET
.PREFIX
.ARCHIVE
.MEMBER
です。
さらに、
では以下の内部変数または環境変数を利用することができます。
- $
-
単一のドル記号
`$'
。
すなわち、
`$$'
は単一のドル記号に置換されます。
- MAKE
-
の起動に使用された名前
(argv [0]
)
。
- .CURDIR
-
が実行されたディレクトリ。
ユーティリティは
.CURDIR
を、
getcwd(3)
から渡される公式なパスに設定します。
- .OBJDIR
-
ターゲットを作成するディレクトリへのパス。
起動時に、
はターゲットファイルを置く代わりのディレクトリを検索します。
はこの特別なディレクトリに移動することを試み、
makefile がカレントディレクトリになかった場合にはこのディレクトリで
検索されます。
以下の順番でディレクトリは試されます:
-
${MAKEOBJDIRPREFIX}/`pwd`
-
${MAKEOBJDIR}
-
obj.${MACHINE}
-
obj
-
/usr/obj/`pwd`
最初に
が移動に成功したディレクトリが使われます。
もし
MAKEOBJDIRPREFIX
または
MAKEOBJDIR
のどちらかが環境で設定されていて
が対応するディレクトリに移動できなかった場合は、
リストの残りをチェックすることなしにカレントディレクトリが使われます。
それらが定義されておらず
が残った 3 つのディレクトリのいずれにも移動できなかった場合、
カレントディレクトリが使われます。
MAKEOBJDIRPREFIX
と
MAKEOBJDIR
とは環境変数でなければならず、
のコマンドラインで設定してはいけません。
ユーティリティは、
getcwd(3)
で与えられる正規化されたパスを
.OBJDIR
へ設定します。
- .MAKEFILE_LIST
-
デフォルトファイルや、コマンドラインや、
.include
ディレクティブから得られた makefile も含め、
がさまざまな makefile を読み込むときに、
.MAKEFILE_LIST
変数にそれらの名前が自動的に追加されます。
現在の makefile の名前がこの変数の末尾の単語となるようにするため、
これらは、
がパーズ開始する前に右側に追加されます。
- .MAKEFLAGS
-
環境変数
MAKEFLAGS
は、
のコマンドラインにて指定されるあらゆるものを含みます。
その中身は
.MAKEFLAGS
変数に記憶されます。
のコマンドラインで指定されたオプションと変数代入のすべてが
.MAKEFLAGS
変数に追加され、
が実行する全プログラムの環境にこの変数が
MAKEFLAGS
として組み込まれます。
- MFLAGS
-
下位互換性のために提供されます。
この変数は、
MAKEFLAGS
環境変数から得たオプションすべてに加え、
のコマンドラインで指定されたオプションすべてを含みます。
- .TARGETS
-
が現在構築しているターゲットのリスト。
- .INCLUDES
-
.INCLUDES
特殊ターゲット参照。
- .LIBS
-
.LIBS
特殊ターゲット参照。
- MACHINE
-
MACHINE
環境変数、または定義されていない場合は
uname(3)
によって得られる、
が動作しているマシンアーキテクチャの名称。
- MACHINE_ARCH
-
のコンパイル時に定義された
がどのマシンアーキテクチャ向けにコンパイルされたかを示す名称。
- VPATH
-
Makefile はコロンで区切られたディレクトリのリストを
VPATH
に設定することができます。
が全ての入力 makefile の解析を終了した後、
このディレクトリでソースファイルを検索します。
変数展開において、その変数内の単語を選択したり、変更したりすることが
できます (
``単語''
とは空白で区切られた文字列です)。
変数展開の一般形は、次のとおりです。
{variable[:modifier[:...]]}
各修飾子は、コロンと以下に示すいずれかの文字のうち 1 文字からなります。
リテラルなコロン
(`:'
)
を指定するにはコロンの前にバックスラッシュ
(`\'
)
を置きます。
- C / pattern
/ replacement
/ [1g
]
-
拡張正規表現
pattern
( re_format7
を参照) に一致する部分それぞれを、
ed(1)
スタイルの
replacement
文字列と置換することで、その値の各語を変更します。
通常、値中の各語の最初のパターンを置換します。
`1'
修飾子は、置換対象をたかだか 1 語に制限します。
`g'
修飾子は、置換対象の個数が、
語 (または複数の語) 中で見つかる検索パターン数と同じになるようにします。
`1'
と
`g'
は直交していることに注意してください。
前者は、複数の語が影響を受け得るか否かを指定しますが、
後者は、影響を受ける各語の中で複数の置換が発生し得るか否かを指定します。
- E
-
変数中の各単語を拡張子で置換します。
- H
-
変数中の各単語を、パスの最後の要素
を除いた部分で置換します。
- L
-
変数を小文字に変換します。
- M pattern
-
- pattern にマッチする単語を選択します。
標準的なワイルドカード
( `*'
`?'
,
`[]'
)
が使用できます。
ワイルドカード文字はバックスラッシュ
(`\'
)
によりエスケープできます。
- N pattern
-
pattern にマッチしない単語を選択します。
それ以外は
M
と同様です。
- O
-
変数中のすべての語をアルファベット的に整列させます。
- Q
-
変数中のすべてのシェルメタ文字をクォートし、再帰起動される
に安全に渡せるようにします。
- R
-
変数中の各単語から拡張子を取り除きます。
- S / old_string
/ new_string
/ [g
]
-
変数の値で各単語中の最初の
old_string
を
new_string
に置換します。
もし、最後のスラッシュのあとに
`g'
が指定されていれば、各単語中に出現したすべての
old_string
が
new_string
に置換されます。
old_string
がキャレット
(`^'
)
で始まっているなら、
old_string
を各単語の先頭からマッチさせることを
意味します。
old_string
がドル記号
(`$'
)
で終わっているなら、その文字列を各単語の終端にマッチさせることを
意味します。
new_string
中のアンパサンド
(`&'
)
は
old_string
に置換されます。修飾文字列の区切りにはどんな文字を使ってもかまいません。
`^'
,
`$'
,
`&'
と区切り文字はバックスラッシュ
(`\'
)
によりエスケープできます。
old_string
と
new_string
中では通常の変数置換が行われます。
ただし、ドル記号
(`$'
)
の展開を抑制するためには、通常のドル記号の前置ではなく、
バックスラッシュでエスケープします。
- old_string=new_string
-
これは
AT&T System
V
での変数置換の形式です。これは最後の修飾子として指定する必要があります。
もし、パターンマッチ文字
%
が
new_string
にも
old_string
にも含まれないなら、
new_string
と
old_string
はどちらも単語の最後にマッチするものとみなされます。
すなわち、
拡張子のみか、または単語全部が置換されることになります。
そうでなければ、
%
が
old_string
に含まれており、それは
new_string
に置換されます。
- T
-
変数中の各単語をパスの最後の要素
で置換します。
- U
-
変数を大文字に変換します。
索引
ディレクティブ、条件式、FOR ループ
では、C 言語を彷彿させるディレクティブ、条件文、ループを使用することが
できます。
これらの制御構造は、行頭に単一のドット
(`.'
)
がくることで識別されます。
以下のディレクティブがサポートされています:
- .include <file>
-
- .include file
-
指定した makefile をインクルードします。
アングルブラケットが使用された場合は、
- makefile はシステムの makefile ディレクトリにあるものを用います。
ダブルクォートが使用された場合は、
makefile が存在するディレクトリ、
-I
オプションで指定されたディレクトリ、システムの makefile ディレクトリの
順に検索します。
- .undef variable
-
指定したグローバル変数を未定義とします。
グローバル変数のみ、未定義とすることができます。
- .error message
-
makefile の処理を即座に終了します。
makefile のファイル名と、どの行でエラーとなったかと、
指定したエラーメッセージとを、標準出力に表示し、
は終了コード 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 言語と同様、
は条件式を、式の値を決定するのに必要なところまでしか評価しません。
評価順序を変更するには括弧を使います。
論理オペレータ
`!
'
は条件式全体の値を反転するのに使用します。
これは
`&&
'
より優先順位が上です。
式
expression
は、以下のいずれかの形式です:
- defined
-
引数として変数名をとり、変数が定義されていれば真となる。
- 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
オプションが指定されていても、このターゲットに関連したシェルコマンドを
実行します。
通常、再帰的な
のために用いられます。
- .NOTMAIN
-
通常
は、最初に発見したターゲットをデフォルトのターゲットとみなします。
.NOTMAIN
が指定されたターゲットはデフォルトのターゲットとはみなされなくなります。
- .OPTIONAL
-
もし
.OPTIONAL
が指定されたターゲットの作り方がわからなくても、エラーとはせず、
そのターゲットは必要ないか、すでに存在しているものとみなします。
- .PRECIOUS
-
通常
が中断されたときは、作成途中のターゲットは削除されます。
本ソースを指定することで、そのターゲットを削除しなくなります。
- .SILENT
-
指定されたターゲットに関連づけられたシェルコマンドを実行するときに
エコーを行いません。
シェルコマンドの先頭に
`@'
を指定したのと等価です。
- .USE
-
指定されたターゲットをマクロ的に扱います。
.USE
をソースに持つターゲット
(以下ではマクロと呼びます)
が別のターゲットのソースとなった場合、その
ターゲットはコマンド、ソース、属性(
.USE
は除く)
をマクロから受け取ります。
もし、すでにターゲットにコマンドが指定されていた
場合は、マクロのコマンドが追加されます。
- .WAIT
-
特別な
.WAIT
ソースが依存関係行に現れた時には、ソースはその行中でソースが
作成されるまで待ちます。
ループは検出されず、ループ形式のターゲットは単に無視されます。
索引
特殊ターゲット
特殊ターゲットは、他のターゲットとともに使用してはいけません。
すなわち、
依存関係記述行の唯一のターゲットとして指定する必要があります。
- .BEGIN
-
本ターゲットに指定されたシェルコマンドは他の処理に先立って実行されます。
- .DEFAULT
-
これは、作成方法がわからないどんなターゲットにも適用される
.USE
ルールのようなものです。シェルスクリプトのみを使用します。
.DEFAULT
に指定されたコマンド中の
.IMPSRC
変数はターゲット自身の名前に置換されます。
- .END
-
本ターゲットに指定されたシェルコマンドは、他のすべての処理の終了後に
実行されます。
- .IGNORE
-
指定されたソースに
.IGNORE
属性を付与します。
もしソースが指定されていなければ、
-i
オプションを指定したのと同じ意味になります。
- .INCLUDES
-
ソースファイル中で include される可能性のあるファイルの拡張子のリスト。
拡張子はあらかじめ
.SUFFIXES
で宣言されていなければなりません;
このように宣言された拡張子は自身の検索パス(
.PATH
参照)
にそれぞれ
-I
フラグを前に付けた状態で
.INCLUDES
特殊変数に設定されます。
- .INTERRUPT
-
が中断されたとき、本ターゲットに指定されたコマンドを実行します。
- .LIBS
-
.INCLUDES
が include ファイルに対して行うことと同じことを
ライブラリに対して行います。
ただし
-L
フラグが使われます。
- .MAIN
-
ターゲットを指定せずに
が起動された場合、本ターゲットを処理します。
がデフォルトターゲットを選択した際に、
利用者がコマンドラインからデフォルトターゲットを指示できるようにするため、
明示的・暗黙的に関わらず必ず設定されます。
- .MAKEFLAGS
-
ソースにおいて、
に指定するフラグを指定します。
フラグはシェルでタイプしたのと同様に
渡されますが、
-f
オプションは無効になります。
- .MFLAGS
-
上と同様です。下位互換性のためのものです。
- .NOTPARALLEL
-
並列モードを使いません。
- .NO_PARALLEL
-
上と同じですが、
pmake
の変種のための互換性のためにあります。
- .ORDER
-
シーケンス中の名前付きターゲットが作成されます。
- .PATH
-
カレントディレクトリに発見できなかったときのファイルの検索パスを、
本ターゲットのソースとして指定します。
ソースが指定されなかった場合、
以前に設定されていたディレクトリが無効になります。
可能であれば
.PATH
を利用する方が、
VPATH
変数を利用するよりも好まれています。
- .PATHsuffix
-
カレントディレクトリに発見できなかったときの
suffix のついたファイルの検索パスをソースとして指定します。
ユーティリティはファイルが見つからなかった場合に、
デフォルトパスよりも先に、まず suffix の付いた検索パスで探します。
この形式は
.LIBS
と
.INCLUDES
が動作するために必要です。
- .PHONY
-
.PHONY
属性を指定したソースに適用します。
この属性を持ったターゲットは
いつでも更新されていると考えられます。
- .PRECIOUS
-
指定されたソースに
.PRECIOUS
属性を付与します。
もし、ソースが指定されなかった場合、
すべてのターゲットに
.PRECIOUS
属性を与えます。
- .SILENT
-
指定されたソースに
.SILENT
属性を付与します。
もし、ソースが指定されなかった場合、
ファイル中のすべてのコマンドに
.SILENT
属性を与えます。
- .SUFFIXES
-
ソースにおいて、
で用いる拡張子を指定します。
ソースが指定されなかった場合は、
以前の指定が無効になります。
索引
互換性
の古いバージョンは
MAKEFLAGS
の代わりに
MAKE
を使っていました。
この機能は POSIX への互換性のために削除されました。
内部変数
MAKE
は
.MAKE
と同じ値が代入されます ;
この機能は将来削除されるかもしれません。
ここに書かれている以上の
の奥義のほとんどは、
より多くの互換性を保つために使用を避けるべきです。
索引
環境変数
ユーティリティは、存在する場合、次の環境変数の値を用います:
MACHINE
MAKE
MAKEFLAGS
MAKEOBJDIR
MAKEOBJDIRPREFIX
索引
関連ファイル
- .depend
-
依存関係リスト
- Makefile
-
依存関係リスト
- makefile
-
依存関係リスト
- obj
-
オブジェクトディレクトリ
- sys.mk
-
システム定義の makefile
(他のすべてのファイルよりも前に処理されます。
これには
makefile
と
Makefile
も含まれます)
- /usr/share/mk
-
システム定義の makefile が置かれるディレクトリ
- /usr/share/doc/psd/12.make
-
PMake のチュートリアル
- /usr/obj
-
デフォルトの
MAKEOBJDIRPREFIX
ディレクトリ
索引
使用例
インクルードされた makefile すべてを、訪問順にリストする。
"make -V .MAKEFILE_LIST | tr \ \\n"
索引
バグ
.OBJDIR
の決定は不条理といっていいほどまで曲解されます。
複数の
.MAIN
特殊ターゲットが存在した場合、
は最初のもの以外は黙って無視します。
がターゲット名なしに起動され、かつ、
.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.conf5
-
"PMake - A Tutorial"
/usr/share/doc/psd/12.make
にあります。
索引
歴史
は
PWB UNIX
ではじめて現れました。
索引
Index
- 名称
-
- 書式
-
- 解説
-
- ファイル依存関係記述
-
- シェルコマンド
-
- 変数代入
-
- ディレクティブ、条件式、FOR ループ
-
- コメント
-
- 特殊ソース
-
- 特殊ターゲット
-
- 互換性
-
- 環境変数
-
- 関連ファイル
-
- 使用例
-
- バグ
-
- 関連項目
-
- 歴史
-
Time: 07:06:13 GMT, January 12, 2009