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のバージョンナンバーが格納されています。