Newer
Older
snipet / libscpp / trunk / unittest / Makefile
# ==============================================================================
#  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)