# vim: ts=4 sw=4 sts=4 fenc=utf-8 ff=unix : # ===================================================================== # Makefile for libsc # ===================================================================== # --------------------------------------------------------------------- # SETTING & OPTION # --------------------------------------------------------------------- #TARGET_TYPE = static-library #TARGET_TYPE = shared-library #TARGET_TYPE = windows-dll TARGET_TYPE = exec TARGET_NAME = unittest MAJOR_VER = 1 MINOR_VER = 0 SRCDIR = ../src TESTDIR = src OBJDIR = obj SRCS = $(wildcard $(SRCDIR)/*.c) TESTS = $(wildcard $(TESTDIR)/*.c) $(TESTDIR)/unittest_main.c OBJS = $(SRCS:$(SRCDIR)/%.c=$(OBJDIR)/%.o) $(TESTS:$(TESTDIR)/%.c=$(OBJDIR)/%.o) DEPEND_FILE = depend.inc INCLUDES = -I../include -Iinclude CFLAGS = $(INCLUDES) CFLAGS += -Wall CFLAGS += -DSC_DEBUG CFLAGS += -g -fprofile-arcs -ftest-coverage SFLAGS = -fPIC LDFLAGS = -g -fprofile-arcs -ftest-coverage LIBS = `../sc-config --libs-depends` # --------------------------------------------------------------------- # TARGET_TYPE 毎の設定 # --------------------------------------------------------------------- ifeq ($(TARGET_TYPE), static-library) TARGET = lib$(TARGET_NAME).a else ifeq ($(TARGET_TYPE), shared-library) TARGET = lib$(TARGET_NAME).so.$(MAJOR_VER).$(MINOR_VER) CFLAGS += $(SFLAGS) else ifeq ($(TARGET_TYPE), windows-dll) TARGET = $(TARGET_NAME).dll CFLAGS += -mrtd else ifeq ($(TARGET_TYPE), exec) TARGET = $(TARGET_NAME).exe endif # --------------------------------------------------------------------- # SUFFIXES # --------------------------------------------------------------------- .SUFFIXES: .o .c # --------------------------------------------------------------------- # COMMANDS # --------------------------------------------------------------------- AS = as AR = ar CC = gcc CP = cp MV = mv MAKE = make MKDIR = mkdir RANLIB = ranlib RM = rm STRIP = strip # --------------------------------------------------------------------- # TARGET # --------------------------------------------------------------------- all: depend $(TARGET) # --------------------------------------------------------------------- # static library # --------------------------------------------------------------------- lib$(TARGET_NAME).a: $(OBJS) $(AR) rv $(TARGET) $^ $(RANLIB) $(TARGET) # --------------------------------------------------------------------- # shared library # --------------------------------------------------------------------- lib$(TARGET_NAME).so.$(MAJOR_VER).$(MINOR_VER): $(OBJS) $(CC) $(LDFLAGS) -shared -Wl,soname,$(TARGET_NAME).so.$(MAJOR_VER) -o $(TARGET) $^ $(LIBS) # --------------------------------------------------------------------- # windows dll # --------------------------------------------------------------------- $(TARGET_NAME).dll: $(OBJS) $(CC) $(LDFLAGS) -shared -o $(TARGET) $^ $(LIBS) # --------------------------------------------------------------------- # exec # --------------------------------------------------------------------- $(TARGET_NAME).exe: $(OBJS) $(CC) $(LDFLAGS) -o $(TARGET) $^ $(LIBS) # --------------------------------------------------------------------- # .c -> .o # --------------------------------------------------------------------- $(OBJDIR)/%.o: $(SRCDIR)/%.c $(CC) $(CFLAGS) -c -o $@ $< $(OBJDIR)/%.o: $(TESTDIR)/%.c $(CC) $(CFLAGS) -c -o $@ $< # --------------------------------------------------------------------- # create unittest_main.c # --------------------------------------------------------------------- $(TESTDIR)/unittest_main.c: lib/create_unittest_main.sh # --------------------------------------------------------------------- # clean # --------------------------------------------------------------------- .PHONY: clean clean: $(RM) -f $(TARGET_NAME).a $(RM) -f $(TARGET_NAME).so.* $(RM) -f $(TARGET_NAME).dll $(RM) -f $(TARGET_NAME).exe $(RM) -f $(OBJDIR)/*.o $(RM) -f $(OBJDIR)/*.gcda $(OBJDIR)/*.gcno $(RM) -f $(DEPEND_FILE) $(RM) -f *~ */*~ $(RM) -f $(TESTDIR)/unittest_main.c $(RM) -f $(TESTDIR)/unittest_main.h $(RM) -f unittest.tmp # --------------------------------------------------------------------- # depends # --------------------------------------------------------------------- .PHONY: depend depend: $(SRCS) -@ $(RM) -f $(DEPEND_FILE) -@ for i in $^; do \ echo -n "$(OBJDIR)/" >> $(DEPEND_FILE); \ cpp -MM $(CFLAGS) $$i | sed "s/\ [_a-zA-Z0-9\/]*\.c//g" >> $(DEPEND_FILE); \ echo "" >> $(DEPEND_FILE); \ done # --------------------------------------------------------------------- # include # --------------------------------------------------------------------- -include $(DEPEND_FILE)