¿Cómo hace Makefile el progtwig C sin siquiera especificar un comstackdor?

Estaba usando un Makefile del libro " Advanced Linux Programming (2001)" [código] . Fue extraño para mí ver que GNU make comstack el código correctamente, sin siquiera especificar un comstackdor en el Makefile. ¡Es como hornear sin receta!

Esta es una versión mínima del código:

test.c

int main(){} 

Makefile

 all: test 

y hacer realmente funciona! Este es el command que ejecuta:

 cc test.c -o test 

No pude encontrar nada útil en la documentation. ¿Cómo es esto posible?


PD Una nota adicional: incluso el idioma no está especificado; Como test.c está disponible, GNU make usa cc . Si existe test.cpp o test.cc (cuando no hay test.c ), usa g++ (y no c++ ).

Solutions Collecting From Web of "¿Cómo hace Makefile el progtwig C sin siquiera especificar un comstackdor?"

Make hace esto usando sus reglas incorporadas . Estos le dicen, en particular, cómo comstackr el código C y cómo vincular los progtwigs de un solo object.

En realidad, ni siquiera necesitas un Makefile:

 make test 

funcionaría sin uno

Para ver las reglas ocultas que hacen que todo esto sea posible, use la opción -p sin Makefile:

 make -p -f /dev/null 

Como señala alephzero , Make ha tenido reglas incorporadas durante mucho time (si no siempre); La primera versión de Stuart Feldman en Unix V7 los define en files.c , y su artículo de 1979 los menciona. También son parte de la especificación POSIX . (Esto no significa que todas las implementaciones de Make los admitan; el antiguo Borland Make para DOS no lo hace, al less hasta la versión 3.0).