PROD_DIR := ./product SHARED_DIR := ./shared TEST_DIR := ./test UNITY_FOLDER :=./Unity BUILD_DIR :=./build PROD_EXEC = main PROD_DIRS := $(PROD_DIR) $(SHARED_DIR) PROD_FILES := $(wildcard $(patsubst %,%/*.c, $(PROD_DIRS))) HEADER_PROD_FILES := $(wildcard $(patsubst %,%/*.h, $(PROD_DIRS))) PROD_INC_DIRS=-I$(PROD_DIR) -I$(SHARED_DIR) TEST_EXEC = main_test TEST_DIRS := $(TEST_DIR) $(SHARED_DIR) $(UNITY_FOLDER) TEST_FILES := $(wildcard $(patsubst %,%/*.c, $(TEST_DIRS))) HEADER_TEST_FILES := $(wildcard $(patsubst %,%/*.h, $(TEST_DIRS))) TEST_INC_DIRS=-I$(TEST_DIR) -I$(SHARED_DIR) -I$(UNITY_FOLDER) CC=gcc SYMBOLS=-Wall -Werror -g -O0 -std=c99 TEST_SYMBOLS=$(SYMBOLS) -DTEST -DUNITY_USE_MODULE_SETUP_TEARDOWN .PHONY: clean test all: $(PROD_EXEC) $(TEST_EXEC) $(PROD_EXEC): Makefile $(PROD_FILES) $(HEADER_FILES) $(CC) $(PROD_INC_DIRS) $(SYMBOLS) $(PROD_FILES) -o $(BUILD_DIR)/$(PROD_EXEC) $(TEST_EXEC): Makefile $(TEST_FILES) $(HEADER_FILES) $(CC) $(TEST_INC_DIRS) $(TEST_SYMBOLS) $(TEST_FILES) -o $(BUILD_DIR)/$(TEST_EXEC) run: $(PROD_EXEC) @./$(BUILD_DIR)/$(PROD_EXEC) encode Makefile a.tmp @./$(BUILD_DIR)/$(PROD_EXEC) channel a.tmp b.tmp @./$(BUILD_DIR)/$(PROD_EXEC) decode b.tmp c.tmp cmp Makefile c.tmp test: $(TEST_EXEC) @./$(BUILD_DIR)/$(TEST_EXEC) encode_test : $(TEST_EXEC) @./$(BUILD_DIR)/$(TEST_EXEC) encode channel_test : $(TEST_EXEC) @./$(BUILD_DIR)/$(TEST_EXEC) channel decode_test : $(TEST_EXEC) @./$(BUILD_DIR)/$(TEST_EXEC) decode parity_test : $(TEST_EXEC) @./$(BUILD_DIR)/$(TEST_EXEC) parity testio : $(TEST_EXEC) @./$(BUILD_DIR)/$(TEST_EXEC) io clean: rm -f $(BUILD_DIR)/$(PROD_EXEC) rm -f $(BUILD_DIR)/$(TEST_EXEC)