simplify Makefile using macros

This commit is contained in:
Emile Clark-Boman 2025-09-10 01:23:38 +10:00
parent b2f204a2cb
commit 3f9b404012

View file

@ -5,22 +5,27 @@ include config.mk
# === BUILD ENVIRONMENT ===
BIN := bin
BUILD := build
LIB := lib
# Macro definitions
define mkbin
$(addprefix $(BIN)/,$1)
LIB := lib
CLI := cli
# === MACRO DEFINITIONS ===
define objpath
$(addprefix $(BUILD)/,
$(addsuffix .o,
$(basename $(1))))
endef
define mkbuild
$(addprefix $(BUILD)/,$1)
endef
define mklib
$(addprefix $(LIB)/,$1)
define mkobj
$(foreach DEP, $?,
mkdir -p $(dir $(call objpath, $(DEP)))
$(CC) $(CFLAGS) -o $(call objpath, $(DEP)) -c $(DEP))
$(LD) -r $(LDFLAGS) -o $@ $(call objpath, $?)
endef
# === BUILD TARGETS ===
all: $(BUILD) $(BIN) $(call mkbin,pw-test graph sine shfx cli)
$(BIN)/pw-test: $(call mklib, main.c)
all: $(BUILD) $(BIN) $(addprefix $(BIN)/,pw-test shfx dorne)
$(BIN)/pw-test: $(addprefix $(LIB)/, main.c)
$(CC) $(CFLAGS) -o $(BUILD)/pw-test.o -c $^
$(CLD) $(CLDFLAGS) -o $@ $(BUILD)/pw-test.o
@ -28,16 +33,18 @@ $(BIN)/shfx: shfx/main.c
$(CC) $(CFLAGS) -o $(BUILD)/shfx.o -c $^
$(CLD) $(CLDFLAGS) -lncurses -o $@ $(BUILD)/shfx.o
$(BIN)/cli: cli/main.c cli/mkpty.c
$(CLD) $(CLDFLAGS) -o $@ $(BUILD)/cli.o
$(BIN)/dorne: $(addprefix $(BUILD)/,dorne.o epty.o)
$(CLD) $(CLDFLAGS) -o $@ $^
$(BUILD) $(BIN):
mkdir -p $@
$1/%.o: $1/%.c
$(foreach dep, $^,
$(CC) $(CFLAGS) -o "$(BUILD)/$(basename $(notdir dep)).o" -c $(dep))
$(LD) $(LDFLAGS) -o $@ $(addsuffix .o,$(basename $^))
$(BUILD)/dorne.o: $(addprefix $(CLI)/, main.c)
$(mkobj)
$(BUILD)/epty.o: $(addprefix $(CLI)/, epty.c _pty.c)
$(mkobj)
# $1/%.o: $1/%.c
# === DEVELOPMENT TARGETS ===
.PHONY: debug run test