make
GNU make
の機能が他の製品のmake
に比較し、いかにすばらしいかを要約したものを示します。基準としては4.2 BSDシステムにあるmake
の機能について検討しています。応用の利くmakefileを記述する、という問題に直面している方は、非互換部分と欠けた機能の項やこの項にリストされていないmake
の機能だけを使う必要があります。
多くの機能はSystem V 版のmake
に由来します。
VPATH
変数とその特殊な意味。これについてはディレクトリから依存ファイルを探すの項を見てください。この機能はSystem V make
にも存在するのですがドキュメントには書かれていません。4.3 BSD make
では(System VのVPATH
機能を真似たものだと)ドキュメントに書いています。
MAKEFLAGS
という変数を通して、オプションは再帰実行のmake
に受け渡されます。これについてはサブmake
にオプションを伝えるの項を見て下さい。
$%
という自動変数はアーカイブ参照時にメンバー名がセットされるものです。これについては自動変数の項を見て下さい。
$@
、$*
、$<
、$%
、$?
という自動変数では$(@F)
と$(@D)
のような形式のものがそれぞれに存在します。明確には$^
という事例に対して一般化しています。これについては自動変数の項を見て下さい。
make
ではこれらのオプションは実際に動作します。
MAKE
という変数経由でmake
を再帰実行させるコマンド。これについてはmake
の再帰利用の項を見て下さい。
make
ではルール連鎖(暗黙ルールの連鎖の項を参照)の一般的な機能のおかげでひとつの型ルールでアーカイブ(アーカイブメンバーターゲットに対する暗黙のルールの項を参照)にメンバーをインストールを十分に行えるようになったため、この機能は古くなりました。
以下は実にさまざまなmake
製品から感銘を受けた機能ですが、一部どれがどれに影響したか不明瞭です。
make
製品でインプリメント(履行)されていて、私たちにはだれが最初に発明したかはわかりませんがかなり各所に広まっています。これについては型ルールの定義と再定義の項を見て下さい。
make
製品でインプリメントし、後にAT&T ベル研究所のAndrew Humeが(「移行終了(transitive closure)」と彼自身が名づけた)mk
プログラムでインプリメントしたものですが、私たちが彼らのどちらかからこの手法を得たか、彼らと同時に私たち自身で考えついたのか、という事は実際のところわかりません。これについては暗黙ルールの連鎖の項を見て下さい。
$^
という自動変数。私たちが発明したものではありませんが、誰が発明したかは不明です。これについては自動変数の項を見て下さい。$+
という自動変数は$^
の単純展開をするものです。
make
では`-W')は(私たちが知る範囲では)Andrew Humeがmk
で発明したものです。
これについてはコマンドを実行する代わりに…の項を見て下さい。
make
や類似プログラムに存在します。これについてはコマンド実行の項を見て下さい。
make
でpatsubst
関数という形で提供されていました。GNU make
にはSunOS 4がリリースされる前からpatsubst
があったため、誰が誰に影響したかは全く持って不明です。
make
に由来します。
これについては変数にテキストを上乗せするの項を見て下さい。
make
に由来します。これについてはターゲットとしてのアーカイブメンバーの項を見て下さい。
-include
ディレクティヴはSunOS 4 make
に由来します。(ただし注意としてSunOS 4 make
では一つの-include
ディレクティヴに複数のmakefileを指定することは許されません。) SGI make
やおそらくそれ以外でも、同じ機能がsinclude
という名前で存在します。
残りの機能はGNU make
で新しく開発されたものです。
make
のオプションの要約を表示する。
MAKE
という変数を通して再帰呼び出しのmake
に渡す。これについてはmake
の再帰利用の項を見て下さい。
define
で一字一句同じにする。
これについては一字一句違わずに変数を定義するの項を見て下さい。
.PHONY
という特別なターゲットで偽のターゲットを宣言する。
AT&T ベル研究所のAndrew Humeはmk
プログラムで構文こそ違えどこれに似た機能をインプリメントしています。これは多分平行して発見された事例なのでしょう。これについては偽りのターゲット(Phony)の項を見て下さい。
make
製品で幾度にわたりインプリメントされており、この機能はCプリプロセッサやそれに似たマクロ言語から単純に拡張されたものであって画期的な概念ではありません。これについてはMakefileの条件分岐部分の項を見て下さい。
MAKEFILES
という変数の項を見て下さい。
make
ではサフィックスは`.'で必ず始まり、`/'という文字を含んではいけないことになっています。
make
の再帰利用で現在の階層を追跡するのにMAKELEVEL
という変数を使う。これについてはmake
の再帰利用の項を見て下さい。
MAKECMDGOALS
という変数に格納する。これについてはゴールを指定する引数の項を見て下さい。
vpath
サーチの提供。
これについてはディレクトリから依存ファイルを探すの項を見て下さい。
make
では非常に限られた範囲ではありますが、makefileのためにSCCSファイルを調べてくれる、という機能はあります。
make
のバージョンナンバーが格納されています。