Я пытался сделать этот Makefile работать как минимум три раза. С каждой итерацией я приближаюсь к своей цели, фиксируя некоторые предыдущие проблемы, перечитывая официальные документы GNU. Теперь у меня осталось только одно место, которое я не понимаю.Почему make продолжает перекомпилировать все объекты?
Вот Makefile:
MAKEFLAGS=-j2
CC=clang++
OPTIMALIZATION=-O2
CFLAGS=-c -std=c++11 -gsplit-dwarf -I. -Iengine -Iengine/bootstrap
LDFLAGS=-lglut -lGL -lGLU -lGLEW -lSOIL -lassimp
SOURCES=$(wildcard *.cpp engine/*.cpp engine/lighting/*.cpp engine/bootstrap/*.cpp)
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=$(addprefix build/,$(shell basename ${PWD}))
.PHONY: depend clean
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(addprefix build/,$(notdir $(OBJECTS))) -o [email protected] $(LDFLAGS)
.cpp.o:
$(CC) $(CFLAGS) $< -o build/$(notdir [email protected])
run: all
./$(EXECUTABLE)
clean:
rm -rf build/*
depend: $(SOURCES)
makedepend $^
# DO NOT DELETE
Моя цель состоит в том, чтобы собрать все файлы в ./build
каталог. И мне недавно удалось это сделать с некоторыми функциями имени файла, как описано в документах GNU.
Но теперь каждый раз, когда я запускаю make
или make run
, он перекомпилирует весь проект.
Как исправить это, чтобы работать только для файлов, которые были изменены недавно?
Я не специалист по make-файлу, но, похоже, ваше правило '.cpp.o' не содержит никаких зависимостей. – Angew