Les programmes make d'autres systèmes prennent en charge quelques fonctionnalités qui ne sont pas implémentées dans GNU make. Cela dit, la norme POSIX.2 (IEEE Standard 1003.2-1992), qui spécifie make, n'exige aucune de ces fonctionnalités.
Une cible de la forme ‘file((entry))’ représente un membre du fichier d'archive file. Toutefois, ce membre n'est pas choisi par son nom, mais selon qu'il s'agit ou non d'un fichier objet définissant le symbole d'éditeur de liens entry.
Cette fonctionnalité n'a pas été intégrée à GNU make parce que doter make de la connaissance du format interne des tables de symboles des fichiers d'archive nuirait à la modularité. Voir Mise à jour des répertoires de symboles d'archive.
Les suffixes (utilisés dans les règles de suffixe) qui se terminent par le caractère ‘~’ ont une signification particulière pour le make de System V : ils désignent le fichier SCCS correspondant au fichier que l'on obtiendrait sans le ‘~’. Par exemple, la règle de suffixe ‘.c~.o’ produit le fichier n.o à partir du fichier SCCS s.n.c. Pour couvrir tous les cas, il faut tout un ensemble de règles de suffixe de ce genre. Voir Règles de suffixe à l'ancienne.
Dans GNU make, tout cet ensemble de cas est traité par deux règles de motif pour l'extraction depuis SCCS, combinées à la fonctionnalité générale de chaînage des règles. Voir Chaînes de règles implicites.
Dans le make de System V et de 4.3 BSD, les fichiers trouvés par la recherche VPATH (voir Recherche dans les répertoires pour les prérequis) voient leur nom modifié à l'intérieur des recettes. Nous estimons qu'il est bien plus propre de toujours utiliser les variables automatiques, ce qui rend cette fonctionnalité inutile.
Dans certains make d'Unix, la variable automatique $* qui apparaît dans les prérequis d'une règle possède la « fonctionnalité » étonnamment étrange de se développer en le nom complet de la cible de cette règle. Nous ne pouvons imaginer ce qui a bien pu passer par la tête des développeurs du make d'Unix pour en arriver là ; c'est totalement incohérent avec la définition habituelle de $*.
Dans certains make d'Unix, la recherche de règles implicites (voir Utiliser les règles implicites) est apparemment effectuée pour toutes les cibles, et non pas seulement pour celles dépourvues de recette. On peut ainsi écrire :
foo.o:
cc -c foo.c
et le make d'Unix devinera intelligemment que foo.o dépend de foo.c.
Nous estimons qu'un tel usage est défaillant. La nature des prérequis dans make est bien définie (du moins pour GNU make), et faire une chose pareille ne cadre tout simplement pas avec ce modèle.
GNU make ne comporte aucune règle implicite intégrée pour compiler ou prétraiter des programmes EFL. Si nous entendons parler de quiconque utilise EFL, nous les ajouterons volontiers.
Il semble que dans le make de SVR4, une règle de suffixe puisse être spécifiée sans recette, et qu'elle soit alors traitée comme si elle avait une recette vide (voir Utiliser des recettes vides). Par exemple, en écrivant :
.c.a:
on peut remplacer la règle de suffixe .c.a intégrée.
Nous estimons qu'il est plus propre qu'une règle sans recette se contente toujours d'ajouter à la liste des prérequis de la cible. L'exemple ci-dessus peut facilement être réécrit pour obtenir le comportement souhaité dans GNU make :
.c.a: ;
Certaines versions de make invoquent le shell avec le drapeau ‘-e’, sauf en présence de ‘-k’ (voir Tester la compilation d'un programme). Le drapeau ‘-e’ demande au shell de se terminer dès que l'un des programmes qu'il exécute renvoie un code de retour non nul. Nous estimons qu'il est plus propre d'écrire chaque ligne de la recette de façon qu'elle se suffise à elle-même et n'exige pas ce traitement particulier.