Aquí presentamos un resumen de las características de GNU make, a modo de comparación con otras versiones de make y en reconocimiento a ellas. Como base de comparación tomamos las características de make en los sistemas 4.2 BSD. Si le preocupa escribir makefiles portables, no debería usar las características que se enumeran aquí, ni tampoco las del capítulo Incompatibilidades y características no implementadas.
Muchas características provienen de la versión de make de System V.
VPATH y su significado especial. Véase Búsqueda de directorios para los prerrequisitos (prerequisites). Esta característica existe en el make de System V, pero no está documentada. Sí está documentada en el make de 4.3 BSD (donde se afirma que imita la característica VPATH de System V).
MAKEFLAGS a las invocaciones recursivas de make. Véase Comunicar opciones a un sub-make.
$% se establece con el nombre del miembro en una referencia a un archivo de archivo (archive). Véase Variables automáticas.
$@, $*, $<, $% y $? tienen formas correspondientes como $(@F) y $(@D). En GNU make lo hemos generalizado a $^ como una extensión natural. Véase Variables automáticas.
make de System V, estas opciones sí hacen algo.
make a través de la variable MAKE sí se ejecutan. Véase Uso recursivo de make.
make, porque el mecanismo general de encadenamiento de reglas (véase Cadenas de reglas implícitas) hace que baste con una sola regla de patrón para instalar miembros en un archivo de archivo (véase Regla implícita para objetivos que son miembros de archivo).
Las siguientes características se inspiraron en diversas otras versiones de make. En algunos casos no está claro exactamente qué versiones inspiraron a cuáles.
make. No estamos seguros de quién lo inventó primero, pero se ha difundido bastante. Véase Definición y redefinición de reglas de patrón.
make para AT&T Eighth Edition Research Unix, y más tarde Andrew Hume, de AT&T Bell Labs, en su programa mk (donde lo denomina «cierre transitivo» (transitive closure)). En realidad no sabemos si lo tomamos de alguno de ellos o si lo ideamos nosotros mismos por la misma época. Véase Cadenas de reglas implícitas.
$^, que contiene la lista de todos los prerrequisitos del objetivo actual. No la inventamos nosotros, pero no tenemos idea de quién lo hizo. Véase Variables automáticas. La variable automática $+ es una pequeña extensión de $^.
make) lo inventó, hasta donde sabemos, Andrew Hume en mk. Véase En lugar de ejecutar las recetas.
make y programas similares, aunque no en las implementaciones de System V ni de BSD. Véase Ejecución de las recetas.
make mediante la función patsubst antes de que se implementara la sintaxis alternativa por compatibilidad con SunOS 4. No está del todo claro quién inspiró a quién, ya que GNU make tenía patsubst antes de que se lanzara SunOS 4.
make de SunOS 4. Véase Añadir más texto a las variables.
make de SunOS 4. Véase Miembros de archivo como objetivos.
-include, que incluye makefiles sin producir error cuando un archivo no existe, proviene del make de SunOS 4. (Pero tenga en cuenta que el make de SunOS 4 no permite especificar varios makefiles en una sola directiva -include.) La misma característica aparece con el nombre sinclude en el make de SGI y quizá en otros.
!= existe en muchas versiones BSD de make y aquí se ha implementado a propósito para que se comporte de forma idéntica a esas implementaciones.
make.
Las características restantes son invenciones nuevas de GNU make:
make.
make mediante la variable MAKE. Véase Uso recursivo de make.
define. Véase Definición de variables multilínea.
.PHONY.
Andrew Hume, de AT&T Bell Labs, también implementó una característica similar con una sintaxis diferente en su programa mk. Esto parece un caso de descubrimiento paralelo. Véase Objetivos ficticios (phony).
Esta característica se ha implementado numerosas veces en distintas versiones de make; parece una extensión natural derivada de las características del preprocesador de C y de lenguajes de macros similares, y no es un concepto revolucionario. Véase Partes condicionales de los Makefiles.
MAKEFILES.
make, deben empezar por «.» y no pueden contener ningún carácter «/».
make mediante la variable MAKELEVEL. Véase Uso recursivo de make.
MAKECMDGOALS las metas (goals) indicadas en la línea de órdenes. Véase Argumentos para especificar las metas.
vpath. Véase Búsqueda de directorios para los prerrequisitos.
make de System V tiene una forma muy, muy limitada de esta funcionalidad, en la que extrae (check out) archivos SCCS para los makefiles.
make. Véase Carga de objetos dinámicos.