Newer
Older
snipet / libscpp / trunk / Makefile
# ==============================================================================
#  Makefile  for  libscpp
# ==============================================================================

# ------------------------------------------------------------------------------
#  SETTING & OPTION
# ------------------------------------------------------------------------------
TARGET_NAME = scpp

#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
OBJDIR      = obj

INCLUDES    = -Iinclude
CFLAGS      = $(INCLUDES)
CFLAGS     += -Wall
CFLAGS     += -O2
#CFLAGS     += -DSCPP_IS_DEBUG
SFLAGS      = -fPIC
LDFLAGS     = 
LIBS        = `./scpp-config --libs-depends`

SRCS        = $(wildcard $(SRCDIR)/*.cpp)
OBJS        = $(SRCS:$(SRCDIR)/%.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
DOXYGEN = doxygen
MV      = mv
MAKE    = make
MKDIR   = mkdir
RANLIB  = ranlib
RM      = rm
STRIP   = strip


# ------------------------------------------------------------------------------
#  TARGET : all
# ------------------------------------------------------------------------------
all: depend $(TARGET)



# ------------------------------------------------------------------------------
#  TARGET : docs
# ------------------------------------------------------------------------------
.PHONY: docs
docs:
	$(DOXYGEN) Doxyfile



# ------------------------------------------------------------------------------
#  TARGET : test
# ------------------------------------------------------------------------------
.PHONY: test
test:
	$(MAKE) -C unittest



# ------------------------------------------------------------------------------
#  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 dll
# ------------------------------------------------------------------------------
$(TARGET_NAME).exe: $(OBJS)
	$(CC) $(LDFLAGS) -o $(TARGET) $^ $(LIBS)


# ------------------------------------------------------------------------------
#  Make obj directory
# ------------------------------------------------------------------------------
$(OBJDIR):
	$(MKDIR) $(OBJDIR)

# ------------------------------------------------------------------------------
#  .cpp -> .o
# ------------------------------------------------------------------------------
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(OBJDIR)
	$(CC) $(CFLAGS) -c -o $@ $<



# ------------------------------------------------------------------------------
#  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 $(DEPEND_FILE)
	$(RM) -f *~ */*~ *.bak */*.bak
	$(MAKE) clean -C unittest



# ------------------------------------------------------------------------------
#  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)