У меня есть Makefile, чтобы помочь построить мой проект C (GNU Make 3,82). Вот только отрывок:Makefile не обнаруживает изменения зависимостей
OBJ = file1.o file2.o file3.o
prog: $(OBJ)
$(COMP) $(OPT) -o [email protected]
$(OBJ): header.h
$(OBJ)
не нуждается в команду после того, как это, так как make
способен работать это как его делать в остальной части Makefile. Все объекты зависят от этого файла заголовка, поэтому они должны быть перекомпилированы, если я его изменю. Однако они этого не делают. Мой Makefile был основан на этом article.
Примечание: Это работает, если я явно создать правило для каждого файла, например, так:
file1.o: header.h
Обновление: Я добавил эхо заявление после
$(OBJ): header.h
линии, чтобы увидеть, если
make
ловил его, но ничего не делая. К сожалению, он тоже ничего не делает. Поэтому я предполагаю, что это означает, что вся линия зависимостей не работает по какой-то причине.
Вот мой полный Makefile в случае, если я где-то напутал:
CC = clang
OPT = -std=c99 -Wall -Wextra -g
LIBS = -lm
COMP = $(CC) $(OPT) $(LIBS)
EXEC = checker solver # Binary file(s)
OBJ = magic_check.o magic_io.o simple_checker.o
build: $(EXEC)
@echo "Building complete."
solver: checker simple_solver.o
$(COMP) simple_solver.o -o [email protected]
checker: $(OBJ)
$(COMP) $(OBJ) -o [email protected]
%(OBJ): magic_io.h
@echo "hello"
magic_check.o: magic_check.h
simple_checker.o: simple_checker.h magic_check.h
simple_solver.o: simple_solver.h
.PHONY: clean
clean:
rm -f checker solver *.o *~ core
@echo "Cleaning... :)"
rebuild: clean build
@echo "Rebuilding..."
@ user2225104 Это требуется для моего класса, но я понимаю, что вы имеете в виду. –
Какую версию 'make' вы используете (что является первой строкой' make -version')? В частности, это GNU make? – Wintermute
@Wintermute GNU Make 3.82 –