-OBJECT_FILES = $(filter %.o, $(C_SOURCE:%.c=%.o) $(CPP_SOURCE:%.cpp=%.o) $(ASM_SOURCE:%.S=%.o))
-DEPENDENCY_FILES = $(OBJECT_FILES:%.o=%.d)
+OBJECT_FILES := $(addsuffix .o, $(basename $(SRC)))
+ifneq ($(OBJDIR),.)
+ $(shell mkdir $(OBJDIR) 2>&1 > /dev/null)
+ VPATH += $(dir $(SRC))
+ OBJECT_FILES := $(addprefix $(patsubst %/,%,$(OBJDIR))/, $(notdir $(OBJECT_FILES)))
+endif
+
+# Create a list of dependency files from the list of object files
+DEPENDENCY_FILES := $(OBJECT_FILES:%.o=%.d)