Voici un résumé des fonctionnalités de GNU make, à des fins de comparaison avec d'autres versions de make et en hommage à celles-ci. Comme référence, nous prenons les fonctionnalités de make des systèmes 4.2 BSD. Si vous tenez à écrire des makefiles portables, vous ne devriez pas utiliser les fonctionnalités listées ici, ni celles du chapitre Incompatibilités et fonctionnalités manquantes.
De nombreuses fonctionnalités proviennent de la version de make de System V.
VPATH et sa signification particulière. Voir le point Recherche des répertoires pour les prérequis (prerequisite). Cette fonctionnalité existe dans le make de System V, mais n'est pas documentée. Elle est documentée dans le make de 4.3 BSD (qui indique qu'elle imite la fonctionnalité VPATH de System V).
make via la variable MAKEFLAGS. Voir le point Communiquer des options à un sous-make.
$% reçoit le nom du membre dans une référence d'archive. Voir le point Variables automatiques.
$@, $*, $<, $% et $? ont des formes correspondantes comme $(@F) et $(@D). Dans GNU make, nous avons étendu cela à $^ de façon naturelle. Voir le point Variables automatiques.
make de System V, ces options font réellement quelque chose.
make via la variable MAKE, même si « -n », « -q » ou « -t » est spécifié. Voir le point Utilisation récursive de make.
make, car le mécanisme général d'enchaînement de règles (voir Chaînes de règles implicites) fait qu'une seule règle de motif pour installer des membres dans une archive (voir Règle implicite pour les cibles membres d'archive) suffit.
Les fonctionnalités suivantes ont été inspirées par diverses autres versions de make. Dans certains cas, on ne sait pas exactement quelles versions en ont inspiré d'autres.
make. Nous ne savons pas avec certitude qui l'a inventé en premier, mais cela s'est passablement répandu. Voir le point Définir et redéfinir les règles de motif.
make pour AT&T Eighth Edition Research Unix, puis par Andrew Hume d'AT&T Bell Labs dans son programme mk (où il l'appelle « fermeture transitive (transitive closure) »). Nous ne savons pas vraiment si nous avons repris cette idée de l'un d'eux ou si nous l'avons imaginée nous-mêmes à la même époque. Voir le point Chaînes de règles implicites.
$^, qui contient la liste de tous les prérequis de la cible courante. Nous ne l'avons pas inventée, mais nous ignorons qui l'a fait. Voir le point Variables automatiques. La variable automatique $+ est une simple extension de $^.
make) a été, à notre connaissance, inventé par Andrew Hume dans mk. Voir le point À la place de l'exécution des recettes.
make et des programmes similaires, mais pas dans les implémentations System V ou BSD. Voir le point Exécution des recettes.
make par la fonction patsubst avant que la syntaxe alternative ne soit implémentée pour des raisons de compatibilité avec SunOS 4. On ne sait pas vraiment qui a inspiré qui, puisque GNU make disposait de patsubst avant la sortie de SunOS 4.
make de SunOS 4. Voir le point Ajouter davantage de texte aux variables.
make de SunOS 4. Voir le point Les membres d'archive comme cibles.
-include, qui inclut des makefiles sans erreur lorsqu'un fichier est inexistant, provient du make de SunOS 4. (Notez toutefois que le make de SunOS 4 ne permet pas de spécifier plusieurs makefiles dans une seule directive -include.) La même fonctionnalité apparaît sous le nom sinclude dans le make de SGI et peut-être d'autres.
!= existe dans de nombreux make de la famille BSD, et il est ici implémenté à dessein pour se comporter de façon identique à ces implémentations.
make.
Les fonctionnalités restantes sont des inventions nouvelles dans GNU make :
make.
make via la variable MAKE. Voir le point Utilisation récursive de make.
define. Voir le point Définir des variables multilignes.
.PHONY.
Andrew Hume d'AT&T Bell Labs a implémenté une fonctionnalité similaire avec une syntaxe différente dans son programme mk. Cela semble être un cas de découverte parallèle. Voir le point Cibles factices (Phony).
Cette fonctionnalité a été implémentée à de nombreuses reprises dans diverses versions de make ; elle semble une extension naturelle dérivée des fonctionnalités du préprocesseur C et de langages de macros similaires, et n'est pas un concept révolutionnaire. Voir le point Parties conditionnelles des makefiles.
MAKEFILES.
make, les suffixes doivent commencer par « . » et ne peuvent pas contenir de caractère « / ».
make au moyen de la variable MAKELEVEL. Voir le point Utilisation récursive de make.
MAKECMDGOALS, des buts donnés sur la ligne de commande. Voir le point Arguments pour spécifier les buts.
vpath sélective. Voir le point Recherche des répertoires pour les prérequis.
make de System V dispose d'une forme très, très limitée de cette fonctionnalité, en ce qu'il extrait (check out) les fichiers SCCS des makefiles.
make. Voir le point Chargement d'objets dynamiques.