Interesante, no sabía que la opción predefinida para usar el compilador de C daba reglas con respecto a los archivos fuente.
De todos modos, una solución simple que demuestra conceptos Makefile simples serían:
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
(tener en cuenta que hacer requiere pestaña en lugar de la hendidura del espacio, así que asegúrese de fijar que cuando se copia)
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 [email protected]
program: $(OBJECTS)
gcc $(OBJECTS) -o [email protected]
clean:
-rm -f $(OBJECTS)
-rm -f program
Traté de hacer esto tan simple como sea posible, omitiendo variables como $ (CC) y $ (CFLAGS) que generalmente se observan en los archivos make. 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. Siéntase 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 [email protected]
.PRECIOUS: $(TARGET) $(OBJECTS)
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -Wall $(LIBS) -o [email protected]
clean:
-rm -f *.o
-rm -f $(TARGET)
Utiliza las características comodín y patsubst de la utilidad make para incluir automáticamente .c y .h en el directorio actual, es decir, al agregar 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 compilador, puede modificar las variables.
En cualquier caso, no use autoconf, por favor. ¡Te lo ruego! :)
Para ser técnicamente correcto, creo que deberías usar '.PHONY: limpiar todos los valores por defecto' para aquellos objetivos que están destinados a ser utilizados desde la línea de comando. Además, Autoconf/Automake no son tan malos. Claro, se sienten mal, y acostumbrarse a ellos es tan divertido como forzar su cabeza a través de una pared de ladrillos, pero funcionan, y están bien desarrollados, y cubrirán la mayoría de sus bases en cuanto a portabilidad, y hará que tu vida sea mucho más fácil al final una vez que te acostumbres a su horrible diseño. –
Supongo que esto funciona, pero pensé que si escribía "make" en la terminal el programa debería ejecutarse. Esto es lo que obtengo: gcc statsh.o -Wall -lm -o prog ¿Es posible simplemente escribir make y ejecutar el programa? – user69514
donde agregaría la marca openmp -fopenmp – MySchizoBuddy