# ============================================================================== # Makefile for libscpp # ============================================================================== # ------------------------------------------------------------------------------ # SETTING & OPTION # ------------------------------------------------------------------------------ TARGET_NAME = unittest # TARGET_EXT = .lib # TARGET_EXT = .dll TARGET_EXT = .exe # TARGET_EXT = .a # TARGET_EXT = .so # TARGET_EXT = MAJOR_VER = 1 MINOR_VER = 0 SRCDIR = ../src TESTDIR = src OBJDIR = obj REPORTDIR = report INCLUDES = -I../include -Iinclude CFLAGS = $(INCLUDES) CFLAGS += -Wall CFLAGS += -DSCPP_DEBUG CFLAGS += -g -fprofile-arcs -ftest-coverage SFLAGS = -fPIC LDFLAGS = -g -fprofile-arcs -ftest-coverage LIBS = `../scpp-config --libs-depends` SRCS = $(wildcard $(SRCDIR)/*.cpp) TESTS = $(wildcard $(TESTDIR)/*.cpp) $(TESTDIR)/unittest_main.cpp OBJS = $(SRCS:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) TESTOBJS = $(TESTS:$(TESTDIR)/%.cpp=$(OBJDIR)/%.o) DEPEND_FILE = depend.inc # ------------------------------------------------------------------------------ # TARGET_EXT 毎の設定 # ------------------------------------------------------------------------------ ifeq ($(TARGET_EXT), .lib) TARGET = $(TARGET_NAME).lib else ifeq ($(TARGET_EXT), .dll) TARGET = $(TARGET_NAME).dll CFLAGS += -mrtd else ifeq ($(TARGET_EXT), .exe) TARGET = $(TARGET_NAME).exe else ifeq ($(TARGET_EXT), .a) TARGET = lib$(TARGET_NAME).a else ifeq ($(TARGET_EXT), .so) TARGET = lib$(TARGET_NAME).so.$(MAJOR_VER).$(MINOR_VER) CFLAGS += $(SFLAGS) else TARGET = $(TARGET_NAME).exe endif # ------------------------------------------------------------------------------ # SUFFIXES # ------------------------------------------------------------------------------ .SUFFIXES: .o .cpp .hpp .h .a .so .dll .lib # ------------------------------------------------------------------------------ # COMMANDS # ------------------------------------------------------------------------------ AR = ar AS = as CC = g++ CP = cp MV = mv MAKE = make MKDIR = mkdir RANLIB = ranlib RM = rm STRIP = strip # ------------------------------------------------------------------------------ # TARGET : all # ------------------------------------------------------------------------------ all: depend $(TARGET) # ------------------------------------------------------------------------------ # TARGET : coverage # ------------------------------------------------------------------------------ #grep -v $(REPORTDIR)/scpp_memory.cpp.gcov` cov: $(REPORTDIR) @gcov -o obj obj/*.gcda > $(REPORTDIR)/report.txt @mv *.gcov $(REPORTDIR)/ @lib/print_gcov_result.sh $(REPORTDIR) # ------------------------------------------------------------------------------ # TARGET : static library # ------------------------------------------------------------------------------ lib$(TARGET_NAME).a: $(OBJS) $(AR) rv $(TARGET) $^ $(RANLIB) $(TARGET) lib$(TARGET_NAME).lib: $(OBJS) $(AR) rv $(TARGET) $^ $(RANLIB) $(TARGET) # ------------------------------------------------------------------------------ # TARGET : shared library # -------------------------------------m---------------------------------------- lib$(TARGET_NAME).so.$(MAJOR_VER).$(MAJOR_VER): $(OBJS) $(CC) $(LDFLAGS) -shared -Wl,-soname,lib$(TARGET_NAME).so.$(MAJOR_VER) -o $(TARGET) $^ $(LIBS) # ------------------------------------------------------------------------------ # TARGET : windows dll # ------------------------------------------------------------------------------ $(TARGET_NAME).dll: $(OBJS) $(CC) $(LDFLAGS) -shared -o $(TARGET) $^ $(LIBS) # ------------------------------------------------------------------------------ # TARGET : windows exe # ------------------------------------------------------------------------------ $(TARGET_NAME).exe: $(OBJS) $(TESTOBJS) $(CC) $(LDFLAGS) -o $(TARGET) $^ $(LIBS) # ------------------------------------------------------------------------------ # Make report directory # ------------------------------------------------------------------------------ $(REPORTDIR): $(MKDIR) $(REPORTDIR) # ------------------------------------------------------------------------------ # Make obj directory # ------------------------------------------------------------------------------ $(OBJDIR): $(MKDIR) $(OBJDIR) # ------------------------------------------------------------------------------ # .cpp -> .o # ------------------------------------------------------------------------------ $(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(OBJDIR) $(CC) $(CFLAGS) -c -o $@ $< $(OBJDIR)/%.o: $(TESTDIR)/%.cpp $(OBJDIR) $(CC) $(CFLAGS) -c -o $@ $< $(TESTDIR)/unittest_main.cpp: bash lib/create_unittest_main.sh # ------------------------------------------------------------------------------ # clean # ------------------------------------------------------------------------------ .PHONY: clean clean: $(RM) -f lib$(TARGET_NAME).a lib$(TARGET_NAME).so.* $(TARGET_NAME) $(RM) -f $(TARGET_NAME).dll $(TARGET_NAME).exe $(RM) -f $(OBJDIR)/*.o $(RM) -f $(OBJDIR)/*.gcda $(OBJDIR)/*.gcno $(RM) -f $(DEPEND_FILE) $(RM) -f *~ */*~ *.bak */*.bak $(RM) -f $(TESTDIR)/unittest_main.cpp $(RM) -f $(REPORTDIR)/* # ------------------------------------------------------------------------------ # 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\/]*\.cpp//g" >> $(DEPEND_FILE); \ echo "" >> $(DEPEND_FILE); \ done # ------------------------------------------------------------------------------ # include # ------------------------------------------------------------------------------ -include $(DEPEND_FILE)