ここでは GNU make が備える機能を、他のバージョンの make との比較や、それらへの敬意も込めてまとめておきます。比較の基準としては、4.2 BSD システムにおける make の機能を出発点とします。移植性の高い makefile を書きたいのであれば、ここに挙げる機能は使わないほうがよいでしょう。非互換な点と未実装の機能の章に挙げた機能も同様です。
多くの機能は System V 版の make に由来します。
VPATH 変数と、それが持つ特別な意味。前提条件を求めてディレクトリを探索するの項を参照してください。この機能は System V make にも存在しますが、ドキュメントには載っていません。4.3 BSD make ではドキュメント化されており(System V の VPATH 機能を真似たものだと書かれています)。
MAKEFLAGS 変数を通じて、再帰的に呼び出した make へオプションを渡す機能。サブmakeへオプションを伝えるの項を参照してください。
$% には、アーカイブ参照におけるメンバ名がセットされます。自動変数の項を参照してください。
$@、$*、$<、$%、$? には、$(@F) や $(@D) のような対応する形があります。GNU make ではこれを $^ にまで自然な形で拡張しています。自動変数の項を参照してください。
make では、これらのオプションは実際に何らかの動作をします。
MAKE を介して make を起動する再帰的なコマンドは実行されます。makeの再帰的な利用の項を参照してください。
make では時代遅れになっています。というのも、ルールの連鎖という一般的な仕組み(暗黙のルールの連鎖を参照)があるため、アーカイブにメンバをインストールするためのパターンルール(アーカイブメンバをターゲットとする暗黙のルールを参照)が一つあれば十分だからです。
次に挙げる機能は、さまざまな他のバージョンの make から着想を得たものです。どのバージョンがどれに影響を与えたのか、はっきりしないものもあります。
make で実装されてきました。誰が最初に考え出したのかは定かではありませんが、あちこちに広まっています。パターンルールの定義と再定義の項を参照してください。
make で実装し、後に AT&T ベル研究所の Andrew Hume が彼の mk プログラムで実装しました(彼はこれを「推移閉包(transitive closure)」と呼んでいます)。私たちがこのアイデアを彼らのいずれかから得たのか、それとも同じ頃に独自に思いついたのかは、実のところ分かりません。暗黙のルールの連鎖の項を参照してください。
$^。これは私たちが考案したものではありませんが、誰が考えたのかも分かりません。自動変数の項を参照してください。自動変数 $+ は、$^ をちょっと拡張したものです。
make では「-W」)は、私たちの知る限り、Andrew Hume が mk で考案したものです。レシピを実行する代わりにの項を参照してください。
make や類似プログラムにさまざまな形で存在します。ただし System V や BSD の実装にはありません。レシピの実行の項を参照してください。
make では patsubst 関数として提供されていました。どちらがどちらに影響を与えたのかはまったくはっきりしません。SunOS 4 がリリースされる前から GNU make には patsubst があったからです。
make に由来します。変数にさらにテキストを追加するの項を参照してください。
make に由来します。アーカイブメンバをターゲットにするの項を参照してください。
-include ディレクティブは SunOS 4 make に由来します。(ただし SunOS 4 make では、一つの -include ディレクティブで複数の makefile を指定することはできません。)同じ機能は SGI make やおそらく他のものでも sinclude という名前で現れます。
!= というシェル代入演算子は多くの BSD 版 make に存在しており、GNU make ではそれらの実装とまったく同じ動作をするよう、意図的に実装しています。
make が GNU Guile を統合しているのと似ています。
残りの機能は、GNU make で新たに考案されたものです。
make のオプションの一覧を表示します。
MAKE を通じて再帰的な make の呼び出しへ自動的に引き渡す機能。makeの再帰的な利用の項を参照してください。
define による、文字どおりそのままの変数定義。複数行変数の定義の項を参照してください。
.PHONY による、偽りのターゲット(Phony)の宣言。
AT&T ベル研究所の Andrew Hume も、彼の mk プログラムで、別の構文を用いて似た機能を実装していました。これは並行発見の一例のようです。偽りのターゲット(Phony)の項を参照してください。
この機能はさまざまなバージョンの make で何度も実装されてきました。C プリプロセッサや類似のマクロ言語が持つ機能から派生した自然な拡張であり、革命的な発想というわけではありません。Makefileの条件分岐の項を参照してください。
MAKEFILESの項を参照してください。
make では、サフィックスは「.」で始まらなければならず、「/」を含むこともできません。
MAKELEVEL を使って、現在の make の再帰の深さを記録する機能。makeの再帰的な利用の項を参照してください。
MAKECMDGOALS で提供する機能。ゴールを指定する引数の項を参照してください。
vpath 探索を提供する機能。前提条件を求めてディレクトリを探索するの項を参照してください。
make にも、makefile 用の SCCS ファイルをチェックアウトするという、ごく限られた形のこの機能があります。
make の動作を変更できる動的オブジェクトをロードする機能。動的オブジェクトのロードの項を参照してください。