Рассмотрим последнее правило ...
# Compile object files into binary
main : $(OBJDIR)/%.o
$(CC) -o $@ $^
К сожалению, $(OBJDIR)/%.o
не раскрывается так, как вам нужно. Предполагая, что все ваши исходные файлы находятся в $(SRCDIR)
, вы можете создать переменную, содержащую их имена ...
SRCFILES := $(wildcard $(SRCDIR)/*.cpp)
Теперь создайте переменную, содержащую соответствующие пути к объектным файлам ...
OBJFILES := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCFILES))
Теперь $(OBJFILES)
должен содержать список путей к объектным файлам, от которых зависит main
. Таким образом, окончательное правило становится ...
main: $(OBJFILES)
$(CC) -o $@ $^