SHELL = /bin/sh
CC = gcc
AR = ar
RANLIB = ranlib
SRCDIR = ./
ARFLAGS = crs
CFLAGS += -D _DEBUG
CFLAGS += -g
#INCLUDES += ./
OUTDIR := out
BIN := $(OUTDIR)/hello
STATICLIB = $(OUTDIR)/libhello.a
SHAREDLIB = $(OUTDIR)/libhello.so
SRCS = $(wildcard *.c)
SUBDIRS += ./tmp
#OBJS = $(SRCS:.c=.o)
SRCS += $(foreach subdir,$(SUBDIRS),$(wildcard $(subdir)/*.c))
OBJS = $(patsubst %.c,%.o,$(foreach subfile,$(SRCS),$(notdir $(subfile))))
objs = $(SRCS:.c=.o)
OUT_OBJS = $(addprefix $(OUTDIR)/,$(OBJS))
VPATH = ./tmp
.PHONY: all clean help staticlib
all: objdir $(BIN)
# build static lib
staticlib: objdir $(objs) $(STATICLIB)
$(STATICLIB):$(OBJS)
$(AR) $(ARFLAGS) $@ $(addprefix $(OUTDIR)/,$^)
#build shared lib
sharedlib: objdir $(OUTDIR)/$(objs) $(SHAREDLIB)
$(SHAREDLIB):$(OBJS)
gcc -shared -o $@ $(addprefix $(OUTDIR)/,$^)
$(BIN):$(OBJS)
gcc -o $@ $(addprefix $(OUTDIR)/,$^)
%.o:%.c
gcc $(CFLAGS) $(INCLUDES) -c $< -o $@
@mv $@ $(OUTDIR)/
objdir:
mkdir -p $(OUTDIR)
@echo $(OUT_OBJS)
help:
@echo ""
@echo "make all"
@echo "make clean"
@echo "make staticlib"
@echo "make sharedlib"
@echo ""
clean:
-rm -rf *.o *.a *.so $(BIN) $(OUTDIR)