PROJECT_DEFAULT = atlys PROJECT_NAME ?= $(PROJECT_DEFAULT) PROJECT_DIR = fw_$(PROJECT_NAME) FW_DIRS = $(wildcard fw_*) COMMON_DIRS = lib DIRS = $(COMMON_DIRS) $(PROJECT_DIR) ##### PRINT ################################### PW=\033[1m\033[0m GR=\E[40;32m WH=\E[40;37m B=\033[1m pr_info = "$(B) $(GR)[$(1)]\t $(WH)$(2)$(PW)" MAKE = $(if $(V),make, make -s) TARGETS = help build clean build_all distclean ##### BUILD RULES ############################# .SILENT: help $(if $(V),,$(TARGETS)) .PHONY: $(TARGETS) help: echo -e "$$ make PROJECT_NAME= [V=1]" echo -e "\tprojects (*=default) .. : $(subst $(PROJECT_DEFAULT),*$(PROJECT_DEFAULT),$(subst fw_,,$(FW_DIRS)))" echo -e "\trule .................. : $(TARGETS)" echo -e "\tV ..................... : verbose" build: $(DIRS) $(foreach dir,$^, echo -e $(call pr_info,MK,Building $(dir)); $(MAKE) -C $(dir) || exit 1;) clean: $(DIRS) $(foreach dir,$^, echo -e $(call pr_info,MK,Cleaning $(dir)); $(MAKE) -C $(dir) clean || exit 1;) build_all: $(COMMON_DIRS) $(FW_DIRS) $(foreach dir,$^, echo -e $(call pr_info,MK,Building $(dir)); $(MAKE) -C $(dir) || exit 1;) distclean: $(COMMON_DIRS) $(FW_DIRS) $(foreach dir,$^, echo -e $(call pr_info,MK,Cleaning $(dir)); $(MAKE) -C $(dir) clean || exit 1;)