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