¿Cómo hago Makefile para recompilar solo los archivos modificados?

He estado luchando un poco para hacer que compile solo los archivos que se han editado. Sin embargo, no tuve mucho éxito y todos los archivos se vuelven a compilar. ¿Alguien puede explicarme por qué?

Mis archivos son:

main.c
a_functions.c

dóndeC Principa incluye @ Main y a_functions.c incluye a.h

Aquí está mi archivo MAKE:

CC=gcc
CFLAGS=-Wall -I. -c
EXEC_FILE=program1


all: program

a_functions.o: a_functions.c
a_functions.c: a.h
main.o: main.c
main.c: main.h

objects: a_functions.c main.c
    $(CC) a_functions.c main.c $(CFLAGS)

program: a_functions.o main.o
    $(CC) a_functions.o main.o -o $(EXEC_FILE)

Cambiar el archivo MAKE según las sugerencias parece tener el mismo problema ::

all: program

a_functions.o: a_functions.c a.h
    gcc a_functions.c -c

main.o: main.c main.h
    gcc main.c -c

program: a_functions.o main.o
    gcc a_functions.o main.o -o program1

Respuestas a la pregunta(2)

Su respuesta a la pregunta