NAME = a.out TEST_BIN= test.out CMD = c-md .DEFAULT_GOAL := all MAKEFLAGS += --no-print-directory include sources.mk CC = clang CPPFLAGS = -std=c99 -I includes CFLAGS = -Wall -Wextra -Werror -pipe LDFLAGS = TEST_LDFLAGS = -lcriterion BUILD_DIR = .build OBJ_DIR = $(BUILD_DIR)/objs MAP_DIR = $(BUILD_DIR)/maps GEN_SRCS = $(MD_SRCS:$(SRC_DIR)/%.c.md=$(BUILD_DIR)/srcs/%.c) GEN_HDRS = $(MD_HDRS:$(INC_DIR)/%.h.md=$(BUILD_DIR)/$(INC_DIR)/%.h) OBJS = $(GEN_SRCS:$(BUILD_DIR)/srcs/%.c=$(OBJ_DIR)/%.o) DEPS = $(OBJS:.o=.d) .SECONDARY: $(GEN_SRCS) $(GEN_HDRS) .PHONY: all all: $(NAME) $(NAME): $(GEN_HDRS) $(OBJS) $(CC) $(LDFLAGS) -o $@ $(OBJS) $(BUILD_DIR)/srcs/%.c: $(SRC_DIR)/%.c.md @mkdir -p $(dir $@) $(dir $(MAP_DIR)/$*.map) $(CMD) -i $< -o $@ -m $(MAP_DIR)/$*.map $(BUILD_DIR)/$(INC_DIR)/%.h: $(INC_DIR)/%.h.md @mkdir -p $(dir $@) $(dir $(MAP_DIR)/$*.h.map) $(CMD) -e c -i $< -o $@ -m $(MAP_DIR)/$*.h.map $(OBJ_DIR)/%.o: $(BUILD_DIR)/srcs/%.c $(GEN_HDRS) @mkdir -p $(dir $@) $(CC) $(CPPFLAGS) $(CFLAGS) -I $(BUILD_DIR)/$(INC_DIR) -MMD -MP -c $< -o $@ -include $(DEPS) .PHONY: test test: $(TEST_BIN) ./$(TEST_BIN) $(TEST_BIN): $(TESTS) $(filter-out $(OBJ_DIR)/main.o,$(OBJS)) @mkdir -p $(dir $@) $(CC) $(CPPFLAGS) $(CFLAGS) -I $(BUILD_DIR)/$(INC_DIR) $(TEST_LDFLAGS) $^ -o $@ .PHONY: clean clean: $(RM) -r $(OBJ_DIR) .PHONY: fclean fclean: clean $(RM) $(NAME) $(RM) $(TEST_BIN) .PHONY: re re: fclean $(MAKE) all