¿Cómo puedo hacer un simple archivo make para gcc en Linux?

Tengo tres archivos: program.c , program.h y headers.h .

program.c incluye program.h y headers.h .

Necesito comstackr esto en Linux usando el comstackdor gcc . No estoy seguro de cómo hacer esto. Netbeans creó uno para mí, pero está vacío.

Interesante, no sabía que la opción predeterminada sería usar las reglas del comstackdor C sobre los archivos fuente.

De todos modos, una solución simple que demuestra conceptos simples de Makefile sería:

 HEADERS = program.h headers.h default: program program.o: program.c $(HEADERS) gcc -c program.c -o program.o program: program.o gcc program.o -o program clean: -rm -f program.o -rm -f program 

(tenga en cuenta que make requiere tabulación en lugar de espacio, así que asegúrese de corregirlo al copiar)

Sin embargo, para admitir más archivos C, tendría que crear nuevas reglas para cada uno de ellos. Por lo tanto, para mejorar:

 HEADERS = program.h headers.h OBJECTS = program.o default: program %.o: %.c $(HEADERS) gcc -c $< -o $@ program: $(OBJECTS) gcc $(OBJECTS) -o $@ clean: -rm -f $(OBJECTS) -rm -f program 

Traté de hacerlo lo más simple posible omitiendo variables como $ (CC) y $ (CFLAGS) que generalmente se ven en makefiles. Si estás interesado en averiguarlo, espero haberte dado un buen comienzo en eso.

Aquí está el Makefile que me gusta usar para la fuente C. Sientase libre de usarlo:

 TARGET = prog LIBS = -lm CC = gcc CFLAGS = -g -Wall .PHONY: default all clean default: $(TARGET) all: default OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) HEADERS = $(wildcard *.h) %.o: %.c $(HEADERS) $(CC) $(CFLAGS) -c $< -o $@ .PRECIOUS: $(TARGET) $(OBJECTS) $(TARGET): $(OBJECTS) $(CC) $(OBJECTS) -Wall $(LIBS) -o $@ clean: -rm -f *.o -rm -f $(TARGET) 

Utiliza las funciones wildcard y patsubst de make para incluir automáticamente los archivos .c y .h en el directorio actual, lo que significa que cuando agregue nuevos archivos de código a su directorio, no tendrá que actualizar el Makefile. Sin embargo, si desea cambiar el nombre del ejecutable generado, las bibliotecas o los indicadores del comstackdor, puede modificar las variables.

En cualquier caso, no use autoconf, por favor. ¡Te lo ruego! 🙂

Por ejemplo, este simple Makefile debería ser suficiente:

 CC = gcc 
 CFLAGS = -Wall

 todo: progtwig
 progtwig: program.o
 program.o: program.c program.h headers.h

 limpiar:
     rm -f progtwig program.o
 ejecute el progtwig
     ./progtwig

Tenga en cuenta que debe haber en la siguiente línea después de limpiar y ejecutar, no espacios.

ACTUALIZACIÓN Comentarios a continuación aplicados

 all: program program.o: program.h headers.h 

es suficiente. el rest es implícito

El archivo make más simple puede ser

 all : test test : test.o gcc -o test test.o test.o : test.c gcc -c test.c clean : rm test *.o 

Dependiendo de la cantidad de encabezados y sus hábitos de desarrollo, es posible que desee investigar gccmakedep. Este progtwig examina su directorio actual y agrega al final del makefile las dependencias de encabezado para cada archivo .c / cpp. Esto es excesivo cuando tienes 2 encabezados y un archivo de progtwig. Sin embargo, si tiene más de 5 pequeños progtwigs de prueba y está editando uno de los 10 encabezados, puede confiar en make para reconstruir exactamente esos progtwigs que fueron modificados por sus modificaciones.

 gcc program.c -o program 

no es necesario ningún archivo.