Мой make-файл перекомпилирует все при изменении заголовочного файла. Как я могу сделать так, чтобы он перекомпилировал только необходимые файлы?Например, a_functions.c использует ah.
Всякий раз, когда я изменяю файл .c, make-файл перекомпилирует этот файл только в объект.
SHELL=/bin/sh
CC=gcc
CFLAGS=-Wall
OBJECTS=main.o a_functions.o b_functions.o c_functions.o d_functions.o
DEPS=main.h a.h b.h c.h d.h
PROGRAM_NAME=program1
INSTALL_PATH=/usr/local/bin
%.o: %.c $(DEPS)
$(CC) -c $(CFLAGS) $< -o $@
.PHONY: all
all: $(PROGRAM_NAME)
$(PROGRAM_NAME): $(OBJECTS)
$(CC) $(OBJECTS) -o $(PROGRAM_NAME)
.PHONY: install
install: $(PROGRAM_NAME)
install -c $(PROGRAM_NAME) $(INSTALL_PATH)/
.PHONY: uninstall
uninstall:
rm -v $(INSTALL_PATH)/$(PROGRAM_NAME)
.PHONY: clean
clean:
rm -v $(PROGRAM_NAME) *.o
Если я изменяю заголовочный файл ниже, это происходит
$ make
gcc -c -Wall main.c -o main.o
gcc -c -Wall a_functions.c -o a_functions.o
gcc -c -Wall b_functions.c -o b_functions.o
gcc -c -Wall c_functions.c -o c_functions.o
gcc -c -Wall d_functions.c -o d_functions.o
gcc main.o a_functions.o b_functions.o c_functions.o d_functions.o -o program1
Когда я изменяю файл .c, это происходит, что я хотел бы также для всех заголовков.
$ make
gcc -c -Wall a_functions.c -o a_functions.o
gcc main.o a_functions.o b_functions.o c_functions.o d_functions.o -o program1
Является ли обычной практикой желание, чтобы это было так?Как бы я изменил свой код, чтобы исправить проблему?