#!/bin/python import sys NAME = "rules.mk" TEMPLATE = """# ---- Push on stack ---- SP := $(SP).x DIRSTACK_$(SP) := $(d) d := $(DIR) # Iterate through subdirectory tree # 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) := LIBS_$(d) := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(LIBS_$(d))) LIBS := $(LIBS) $(LIBS_$(d)) BINS_$(d) := 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)) $(ARCHIVE) $(BINS_$(d)): $(OBJ_DIR)/libn/test.o $(LINK) # ---- Pop off stack ---- -include $(DEPS_$(d)) d := $(DIRSTACK_$(SP)) SP := $(basename $(SP))""" if __name__ == "__main__": try: with open(NAME, 'x') as makefile: makefile.write(f"{TEMPLATE}\n") except: print("rules.mk already present", file=sys.stderr) exit(1)