diff --git a/Makefile b/Makefile index 2e2a0d9..a755c16 100644 --- a/Makefile +++ b/Makefile @@ -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