cursetree/Makefile
2025-09-27 20:56:28 +10:00

49 lines
928 B
Makefile

.DEFAULT_GOAL := all
include config.mk
# === BUILD ENVIRONMENT ===
SRC := src
BIN := bin
BUILD := build
# === MACRO DEFINITIONS ===
define objpath
$(addprefix $(BUILD)/,
$(addsuffix .o,
$(basename $(1))))
endef
define mkobj
$(foreach DEP, $?,
mkdir -p $(dir $(call objpath, $(DEP)))
$(CC) $(CFLAGS) $1 -o $(call objpath, $(DEP)) -c $(DEP))
$(LD) -r $(LDFLAGS) -o $@ $(call objpath, $?)
endef
# === BUILD TARGETS ===
all: tests
.PHONY: tests
tests: $(BIN) $(BIN)/ct_test
$(BIN)/ct_test: $(BUILD) $(addprefix $(BUILD)/, ct_test.o term.o surface.o)
$(LD) -o $@ $(filter %.o, $^)
$(BUILD)/%.o: $(SRC)/%.c
$(CC) $(CFLAGS) -o $@ -c $^
$(BUILD) $(BIN):
mkdir -p $@
# === DEVELOPMENT TARGETS ===
.PHONY: debug
debug:
$(MAKE) all \
CFLAGS="$(CFLAGS) $(CDEBUG)" \
CLDFLAGS="$(LDFLAGS) $(LDDEBUG)"
# === UTILITY TARGETS ===
.PHONY: clean
clean:
- rm -rf $(BUILD) $(BIN) vgcore.* 2>/dev/null