#                     Current project layout
# \
#  \build\
#         \Makefile
#         \obj\*.o          (That directory is self-created at build)
#         \output\*.exe     (That directory is self-created at build)
#  \inc\*.h
#  \src\*.c

TOOLCHAIN_PREFIX	=
CC					=$(TOOLCHAIN_PREFIX)gcc				# mingw32
CC_FLAGS			=-Wall -Werror -g -fshort-enums		# Compiler options.

OBJ					=main.o rs232.o # All files to be compiled must be enumerated here.
DEPENDENCIES		=main.h rs232.h

OBJ_DIR				=./obj
INC_DIR				=../inc
VPATH				=../src

OUT_DIR				=output
OUT_FILE_NAME		=out
OUT_EXE				=$(OUT_FILE_NAME).exe

__OBJ=$(addprefix $(OBJ_DIR)/, $(OBJ))
__DEPENDENCIES=$(addprefix $(INC_DIR)/, $(DEPENDENCIES))

$(OBJ_DIR)/%.o: %.c $(__DEPENDENCIES)	# Compile each .c file if changed or if the DEPENDENCIES are changed.
	@if [ ! -d "$(OBJ_DIR)" ]; then mkdir -v $(OBJ_DIR);  fi
	$(CC) $(CC_FLAGS) -c -o $@ $<

all: $(__OBJ)
	@if [ ! -d "$(OUT_DIR)" ]; then mkdir $(OUT_DIR) -v;  fi
	$(CC) $(CC_FLAGS) -o $(OUT_DIR)/$(OUT_EXE) $^

clean:	
	rm -fr $(OBJ_DIR) $(OUT_DIR)