.DEFAULT_GOAL := all include config.mk # === BUILD ENVIRONMENT === BIN := bin BUILD := build LIB := lib # Macro definitions define mkbin $(addprefix $(BIN)/,$1) endef define mkbuild $(addprefix $(BUILD)/,$1) endef define mklib $(addprefix $(LIB)/,$1) endef # === BUILD TARGETS === all: $(BUILD) $(BIN) $(call mkbin,pw-test graph sine) $(BIN)/pw-test: $(call mklib, main.c) $(CCOMPILER) $(CFLAGS) -o $(BUILD)/pw-test.o -c $^ $(CLINKER) $(LDFLAGS) -o $@ $(BUILD)/pw-test.o $(BIN)/graph: $(call mklib, graph.c) $(CCOMPILER) $(CFLAGS) -o $(BUILD)/graph.o -c $^ $(CLINKER) $(LDFLAGS) -lncurses -o $@ $(BUILD)/graph.o $(BIN)/sine: $(call mklib, sine.c) $(CCOMPILER) $(CFLAGS) -o $(BUILD)/sine.o -c $^ $(CLINKER) $(LDFLAGS) -lncurses -o $@ $(BUILD)/sine.o $(BUILD) $(BIN): mkdir -p $@ # === DEVELOPMENT TARGETS === .PHONY: debug run test debug: $(MAKE) all \ CFLAGS="$(CFLAGS) $(CFLAGS_DBG)" \ LDFLAGS="$(LDFLAGS) $(LDFLAGS_DBG)" run: debug - command $(BIN)/pw-test test: clean run # === UTILITY TARGETS === .PHONY: clean clean: - rm -rf $(BUILD) $(BIN) vgcore.* &>/dev/null