c-md-template/Makefile
2026-01-12 19:41:21 +01:00

71 lines
1.4 KiB
Makefile

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