# Compiler and flags CC = gcc CFLAGS = -Wall -Wextra -std=c99 -I$(UNITY_DIR)/src ### Add -g if you want to debug. It is removed to avoid OS-dependent build files. # Linker flags LDLIBS = -lm # Directories SRC_DIR = src TEST_DIR = tests UNITY_DIR = $(TEST_DIR)/unity BUILD_DIR = build EXAMPLES_DIR = examples MNIST_DIR = $(EXAMPLES_DIR)/MNIST # Unity UNITY_SRC = $(UNITY_DIR)/src/unity.c # Executable names TEST_MATRIX = $(BUILD_DIR)/test_matrix TEST_NETWORK = $(BUILD_DIR)/test_network TEST_XOR = $(BUILD_DIR)/test_xor TEST_MNIST = $(BUILD_DIR)/test_mnist MNIST_TRAIN = $(BUILD_DIR)/mnist_train all: $(BUILD_DIR) $(TEST_MATRIX) $(TEST_NETWORK) $(TEST_XOR) $(TEST_MNIST) $(MNIST_TRAIN) $(BUILD_DIR): mkdir -p $(BUILD_DIR) $(TEST_MATRIX): $(UNITY_SRC) $(SRC_DIR)/matrix.c $(TEST_DIR)/test_matrix.c $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS) $(TEST_NETWORK): $(UNITY_SRC) $(SRC_DIR)/network.c $(SRC_DIR)/matrix.c $(TEST_DIR)/test_network.c $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS) $(TEST_XOR): $(SRC_DIR)/network.c $(SRC_DIR)/matrix.c $(TEST_DIR)/xor.c $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS) $(TEST_MNIST): $(SRC_DIR)/network.c $(SRC_DIR)/matrix.c $(MNIST_DIR)/test_mnist.c $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS) $(MNIST_TRAIN): $(SRC_DIR)/network.c $(SRC_DIR)/matrix.c $(MNIST_DIR)/mnist_train.c $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS) test: $(TEST_MATRIX) $(TEST_NETWORK) $(TEST_XOR) $(TEST_MNIST) clean: rm -rf $(BUILD_DIR) .PHONY: all test clean