simplify Makefile using macros
This commit is contained in:
parent
b2f204a2cb
commit
3f9b404012
1 changed files with 24 additions and 17 deletions
41
Makefile
41
Makefile
|
|
@ -5,22 +5,27 @@ include config.mk
|
||||||
# === BUILD ENVIRONMENT ===
|
# === BUILD ENVIRONMENT ===
|
||||||
BIN := bin
|
BIN := bin
|
||||||
BUILD := build
|
BUILD := build
|
||||||
LIB := lib
|
|
||||||
|
|
||||||
# Macro definitions
|
LIB := lib
|
||||||
define mkbin
|
CLI := cli
|
||||||
$(addprefix $(BIN)/,$1)
|
|
||||||
|
# === MACRO DEFINITIONS ===
|
||||||
|
define objpath
|
||||||
|
$(addprefix $(BUILD)/,
|
||||||
|
$(addsuffix .o,
|
||||||
|
$(basename $(1))))
|
||||||
endef
|
endef
|
||||||
define mkbuild
|
define mkobj
|
||||||
$(addprefix $(BUILD)/,$1)
|
$(foreach DEP, $?,
|
||||||
endef
|
mkdir -p $(dir $(call objpath, $(DEP)))
|
||||||
define mklib
|
$(CC) $(CFLAGS) -o $(call objpath, $(DEP)) -c $(DEP))
|
||||||
$(addprefix $(LIB)/,$1)
|
|
||||||
|
$(LD) -r $(LDFLAGS) -o $@ $(call objpath, $?)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# === BUILD TARGETS ===
|
# === BUILD TARGETS ===
|
||||||
all: $(BUILD) $(BIN) $(call mkbin,pw-test graph sine shfx cli)
|
all: $(BUILD) $(BIN) $(addprefix $(BIN)/,pw-test shfx dorne)
|
||||||
$(BIN)/pw-test: $(call mklib, main.c)
|
$(BIN)/pw-test: $(addprefix $(LIB)/, main.c)
|
||||||
$(CC) $(CFLAGS) -o $(BUILD)/pw-test.o -c $^
|
$(CC) $(CFLAGS) -o $(BUILD)/pw-test.o -c $^
|
||||||
$(CLD) $(CLDFLAGS) -o $@ $(BUILD)/pw-test.o
|
$(CLD) $(CLDFLAGS) -o $@ $(BUILD)/pw-test.o
|
||||||
|
|
||||||
|
|
@ -28,16 +33,18 @@ $(BIN)/shfx: shfx/main.c
|
||||||
$(CC) $(CFLAGS) -o $(BUILD)/shfx.o -c $^
|
$(CC) $(CFLAGS) -o $(BUILD)/shfx.o -c $^
|
||||||
$(CLD) $(CLDFLAGS) -lncurses -o $@ $(BUILD)/shfx.o
|
$(CLD) $(CLDFLAGS) -lncurses -o $@ $(BUILD)/shfx.o
|
||||||
|
|
||||||
$(BIN)/cli: cli/main.c cli/mkpty.c
|
$(BIN)/dorne: $(addprefix $(BUILD)/,dorne.o epty.o)
|
||||||
$(CLD) $(CLDFLAGS) -o $@ $(BUILD)/cli.o
|
$(CLD) $(CLDFLAGS) -o $@ $^
|
||||||
|
|
||||||
$(BUILD) $(BIN):
|
$(BUILD) $(BIN):
|
||||||
mkdir -p $@
|
mkdir -p $@
|
||||||
|
|
||||||
$1/%.o: $1/%.c
|
$(BUILD)/dorne.o: $(addprefix $(CLI)/, main.c)
|
||||||
$(foreach dep, $^,
|
$(mkobj)
|
||||||
$(CC) $(CFLAGS) -o "$(BUILD)/$(basename $(notdir dep)).o" -c $(dep))
|
$(BUILD)/epty.o: $(addprefix $(CLI)/, epty.c _pty.c)
|
||||||
$(LD) $(LDFLAGS) -o $@ $(addsuffix .o,$(basename $^))
|
$(mkobj)
|
||||||
|
|
||||||
|
# $1/%.o: $1/%.c
|
||||||
|
|
||||||
# === DEVELOPMENT TARGETS ===
|
# === DEVELOPMENT TARGETS ===
|
||||||
.PHONY: debug run test
|
.PHONY: debug run test
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue