\r
# Output Messages\r
MSG_BUILD_BEGIN = Begin compilation of project \"$(TARGET)\"...\r
-MSG_BUILD_END = Finished building project \"$(TARGET)\"...\r
+MSG_BUILD_END = Finished building project \"$(TARGET)\".\r
MSG_COMPILE_CMD = ' [CC] :'\r
MSG_REMOVE_CMD = ' [RM] :'\r
MSG_LINKER_CMD = ' [LNK] :'\r
ASM_SOURCE = $(filter %.S, $(SRC))\r
\r
# Convert input source filenames into a list of required output object files\r
-OBJECT_FILES = $(filter %.o, $(C_SOURCE:%.c=%.o) $(CPP_SOURCE:%.cpp=%.o) $(ASM_SOURCE:%.S=%.o))\r
+OBJECT_FILES = $(filter %.o, $(C_SOURCE:%.c=%.o) $(CPP_SOURCE:%.cpp=%.o) $(ASM_SOURCE:%.S=%.o))\r
+DEPENDENCY_FILES = $(OBJECT_FILES:%=%.d)\r
\r
# Create a list of flags to pass to the compiler\r
ifeq ($(ARCH), AVR8)\r
endif\r
\r
# Additional language specific compiler flags\r
-C_FLAGS += -Wstrict-prototypes\r
+C_FLAGS += -O$(OPTIMIZATION) -std=$(C_STANDARD) -MMD -MP -MF $@.d -Wstrict-prototypes \r
+CPP_FLAGS += -O$(OPTIMIZATION) -std=$(CPP_STANDARD) -MMD -MP -MF $@.d\r
\r
# Create a list of flags to pass to the linker\r
LD_FLAGS += -lm -Wl,-Map=$(TARGET).map,--cref -Wl,--gc-sections \r
\r
%.o: %.c\r
@echo $(MSG_COMPILE_CMD) Compiling C file \"$<\"\r
- $(CROSS)gcc -c $(CC_FLAGS) $(C_FLAGS) -O$(OPTIMIZATION) -std=$(C_STANDARD) $< -o $@\r
+ $(CROSS)gcc -c $(CC_FLAGS) $(C_FLAGS) $< -o $@\r
\r
%.o: %.cpp\r
@echo $(MSG_COMPILE_CMD) Compiling C++ file \"$<\"\r
- $(CROSS)gcc -c $(CC_FLAGS) $(CPP_FLAGS) -O$(OPTIMIZATION) -std=$(CPP_STANDARD) -x c++ $< -o $@\r
+ $(CROSS)gcc -c $(CC_FLAGS) $(CPP_FLAGS) -x c++ $< -o $@\r
\r
%.o: %.S\r
@echo $(MSG_COMPILE_CMD) Assembling \"$<\"\r
.PRECIOUS : $(OBJECT_FILES)\r
%.elf: $(OBJECT_FILES)\r
@echo $(MSG_LINKER_CMD) Linking object files into \"$@\"\r
- $(CROSS)gcc $^ $(CC_FLAGS) $(LD_FLAGS) -o $@\r
+ $(CROSS)gcc $(CC_FLAGS) $(LD_FLAGS) $^ -o $@\r
\r
%.hex: %.elf\r
@echo $(MSG_OBJCPY_CMD) Extracting HEX file data from \"$<\"\r
clean:\r
@echo $(MSG_REMOVE_CMD) Removing object files \"$(strip $(notdir $(OBJECT_FILES)))\"\r
rm -f $(OBJECT_FILES)\r
+ @echo $(MSG_REMOVE_CMD) Removing dependency files \"$(strip $(notdir $(DEPENDENCY_FILES)))\"\r
+ rm -f $(DEPENDENCY_FILES)\r
@echo $(MSG_REMOVE_CMD) Removing output files \"$(TARGET).elf $(TARGET).hex $(TARGET).eep $(TARGET).map $(TARGET).lss\"\r
rm -f $(TARGET).elf $(TARGET).hex $(TARGET).eep $(TARGET).map $(TARGET).lss\r
+\r
+# Include build dependency files\r
+-include $(DEPENDENCY_FILES)
\ No newline at end of file