Los programas make de varios otros sistemas admiten algunas características que no están implementadas en GNU make. Aun así, el estándar POSIX.2 (IEEE Standard 1003.2-1992), que especifica make, no exige ninguna de estas características.
Un objetivo de la forma ‘file((entry))’ representa un miembro del archivo de archivo (archive) file. Sin embargo, ese miembro no se elige por su nombre, sino por ser el archivo objeto que define el símbolo de enlazado entry.
Esta función no se incorporó a GNU make porque dotar a make de conocimiento sobre el formato interno de las tablas de símbolos de los archivos de archivo (archive) rompería la modularidad. Véase Actualización de los directorios de símbolos de archivos de archivo.
Los sufijos (usados en las reglas de sufijo) que terminan con el carácter ‘~’ tienen un significado especial para el make de System V. Se refieren al archivo SCCS que corresponde al archivo que se obtendría sin el ‘~’. Por ejemplo, la regla de sufijo ‘.c~.o’ generaría el archivo n.o a partir del archivo SCCS s.n.c. Para cubrir todos los casos se necesita disponer de toda una serie de reglas de sufijo de este tipo. Véase Reglas de sufijo anticuadas.
En GNU make, toda esta serie de casos se gestiona mediante dos reglas de patrón para la extracción desde SCCS, combinadas con la función general del encadenamiento de reglas. Véase Cadenas de reglas implícitas.
En el make de System V y 4.3 BSD, los archivos encontrados por la búsqueda VPATH (véase Búsqueda en directorios de los prerrequisitos (prerequisite)) ven sus nombres reescritos dentro de las recetas. Consideramos que es mucho más limpio usar siempre variables automáticas, lo que hace innecesaria esta función.
En algunos make de Unix, la variable automática $* que aparece en los prerrequisitos (prerequisite) de una regla tiene la asombrosamente extraña «función» de expandirse al nombre completo del objetivo de esa regla. No alcanzamos a imaginar qué pasaba por la mente de los desarrolladores del make de Unix para hacer esto; es totalmente incoherente con la definición normal de $*.
En algunos make de Unix, la búsqueda de reglas implícitas (véase Uso de reglas implícitas) se realiza aparentemente para todos los objetivos, no solo para los que carecen de receta. Por eso es posible escribir algo como:
foo.o:
cc -c foo.c
y el make de Unix deducirá ingeniosamente que foo.o depende de foo.c.
Consideramos que ese uso está mal concebido. La naturaleza de los prerrequisitos (prerequisite) en make está bien definida (al menos en GNU make), y hacer algo así simplemente no encaja en ese modelo.
GNU make no incluye ninguna regla implícita incorporada para compilar o preprocesar programas EFL. Si oímos de alguien que esté usando EFL, las añadiremos con mucho gusto.
En el make de SVR4 parece que una regla de sufijo puede especificarse sin receta, y se trata como si tuviera una receta vacía (véase Uso de recetas vacías). Por ejemplo, si se escribe:
.c.a:
se puede anular la regla de sufijo incorporada .c.a.
Consideramos que es más limpio que una regla sin receta se limite siempre a añadir a la lista de prerrequisitos (prerequisite) del objetivo. Para obtener en GNU make el mismo comportamiento del ejemplo anterior, basta con reescribirlo así:
.c.a: ;
Algunas versiones de make invocan el shell con el indicador ‘-e’, salvo cuando se indica ‘-k’ (véase Probar la compilación de un programa). El indicador ‘-e’ indica al shell que termine en cuanto cualquiera de los programas que ejecuta devuelva un estado distinto de cero. Consideramos que es más limpio escribir cada línea de la receta de modo que se sostenga por sí sola y no requiera este trato especial.