# ---- Push on stack ---- SP := $(SP).x DIRSTACK_$(SP) := $(d) d := $(DIR) # Iterate through subdirectory tree DIR := $(d)/bufio include $(DIR)/rules.mk # ... # Local sources SRCS_$(d) := $(wildcard $(d)/*.c) ASMS_$(d) := $(wildcard $(d)/*.s) OBJS_$(d) := $(SRCS_$(d):.c=.o) OBJS_$(d) += $(ASMS_$(d):.s=.o) OBJS_$(d) := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(OBJS_$(d))) DEPS_$(d) := $(OBJS_$(d):.o=.d) OBJS := $(OBJS) $(OBJS_$(d)) DEPS := $(DEPS) $(DEPS_$(d)) # Local targets LIBS_$(d) := $(d)/libnbn.a LIBS_$(d) := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(LIBS_$(d))) LIBS := $(LIBS) $(LIBS_$(d)) BINS_$(d) := $(d)/test BINS_$(d) := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(BINS_$(d))) BINS := $(BINS) $(BINS_$(d)) # Local rules # $(LIBS_$(d)) := TGTFLAGS := # $(LIBS_$(d)) := TGTINCS := # $(LIBS_$(d)) := TGTLIBS := $(LIBS_$(d)): $(OBJS_$(d)) $(ARCHIVE) $(BINS_$(d)): $(OBJ_DIR)/test.o $(LINK) # ---- Pop off stack ---- -include $(DEPS_$(d)) d := $(DIRSTACK_$(SP)) SP := $(basename $(SP))