####################### path name ##########################
PWD = .
 
LIB = $(PWD)/lib
OBJ = $(PWD)/obj

INC = $(PWD)/inc
SRC = $(PWD)/src

EMP = $(PWD)

CC = gcc

################ compiler information: gcc #################
GCC_OPT := -I$(INC) -L$(LIB) -g
AR_OPT  := cvr


EXAMPLE_CC := $(CC) $(GCC_OPT) -o

OBJ_CC  := $(CC) $(GCC_OPT) -c -o
SLIB_CC := ar  $(AR_OPT) 

######################## targets ###########################
OBJECT = utility array list queue stack sptree  #dequeue heap map hash

SOURCE := $(foreach n,$(OBJECT),$(SRC)/$(n).c)
HEADER := $(foreach n,$(OBJECT),$(INC)/$(n).h)
OBJFIL := $(foreach n,$(OBJECT),$(OBJ)/$(n).o)

TARGET := $(LIB)/libctl.a

EMPFIL := example.c
EMPOUT := example

######################## setting ###########################
.SUFFIXES:
.PHONY: all clean example
.PRECIOUS:
.SECONDARY:

######################## targets ###########################
all: $(TARGET);

$(TARGET): $(OBJFIL)
	@echo 'make static library ....... $@'
	@-rm -f $@
	@$(SLIB_CC) $@ $^

$(OBJFIL): $(OBJ)/%.o: $(SRC)/%.c $(INC)/%.h
	@echo 'make object file .......... $@'
	@$(OBJ_CC) $@ $<

$(EMPOUT): $(EMPFIL) $(TARGET)
	@echo 'make test program for ...... $^'
	@$(EXAMPLE_CC) $@ $^
	
clean:
	-rm -f $(LIB)/*
	-rm -f $(OBJ)/*
	-rm -f $(EMPOUT)