# ---- Push on stack ---- SP := $(SP).x DIRSTACK_$(SP) := $(d) d := $(DIR) # Iterate through subdirectory tree DIR := $(d)/io include $(DIR)/rules.mk # Local sources SRCS_$(d) := $(wildcard $(d)/*.c) OBJS_$(d) := $(SRCS_$(d):.c=.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)/libbio.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)) = TCFLAGS := # $(LIBS_$(d)) = TCINCS := # $(LIBS_$(d)) = TCLIBS := $(LIBS_$(d)): $(OBJS_$(d)) $(OBJS_$(d)/io) $(ARCHIVE) $(BINS_$(d)): $(LIBS_$(d)) $(OBJ_DIR)/libn/libn.a $(LINK) # ---- Pop off stack ---- -include $(DEPS_$(d)) d := $(DIRSTACK_$(SP)) SP := $(basename $(SP))