Makefile 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. MKDIR = mkdir -p
  2. RM = rm -r
  3. CP = cp -r
  4. CFLAGS += -g -Wall -O3
  5. ENABLE_SHARED=true
  6. ifeq ($(ENABLE_SHARED),true)
  7. CFLAGS += -shared -fPIC -fvisibility=hidden
  8. endif
  9. CXXFLAGS += $(CFLAGS) -std=c++11
  10. ARFLAGS := cr
  11. INCDIR = include
  12. LIBDIR = lib
  13. SRCDIR = src
  14. BINDIR = bin
  15. DEPDIR = 3rd
  16. CONFDIR = conf
  17. DISTDIR = dist
  18. TARGET = test
  19. ifeq ($(OS),Windows_NT)
  20. CPPFLAGS += -D_WIN32_WINNT=0x600 -DLL_EXPORTS
  21. TARGET := $(addsuffix .exe, $(TARGET))
  22. endif
  23. DIRS += . test
  24. DIRS += $(shell find $(SRCDIR) -type d)
  25. SRCS += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c $(dir)/*.cc $(dir)/*.cpp))
  26. #OBJS := $(patsubst %.cpp, %.o, $(SRCS))
  27. OBJS := $(addsuffix .o, $(basename $(SRCS)))
  28. $(info TARGET=$(TARGET))
  29. $(info DIRS=$(DIRS))
  30. $(info SRCS=$(SRCS))
  31. $(info OBJS=$(OBJS))
  32. INCDIRS += $(INCDIR) $(DEPDIR)/include $(DIRS)
  33. CPPFLAGS += $(addprefix -I, $(INCDIRS))
  34. LIBDIRS += $(LIBDIR) $(DEPDIR)/lib
  35. LDFLAGS += $(addprefix -L, $(LIBDIRS))
  36. ifeq ($(OS),Windows_NT)
  37. LDFLAGS += -static-libgcc -static-libstdc++
  38. LDFLAGS += -Wl,-Bstatic -lstdc++ -lpthread -lm
  39. else
  40. LDFLAGS += -L3rd/lib/x86_64-linux-gnu
  41. LDFLAGS += -Wl,-Bstatic -luv
  42. LDFLAGS += -Wl,-Bdynamic -lstdc++ -lpthread -lm
  43. endif
  44. $(info MAKE=$(MAKE))
  45. $(info CC=$(CC))
  46. $(info CXX=$(CXX))
  47. $(info CPPFLAGS=$(CPPFLAGS))
  48. $(info CFLAGS=$(CFLAGS))
  49. $(info CXXFLAGS=$(CXXFLAGS))
  50. $(info LDFLAGS=$(LDFLAGS))
  51. default: all
  52. all: prepare $(TARGET)
  53. prepare:
  54. $(MKDIR) $(BINDIR) $(LIBDIR)
  55. $(TARGET): $(OBJS)
  56. $(CXX) $^ -o $(BINDIR)/$@ $(LDFLAGS)
  57. #$(CXX) $(CXXFLAGS) $^ -o $(LIBDIR)/$@ $(LDFLAGS)
  58. #$(AR) $(ARFLAGS) $(LIBDIR)/$@ $^
  59. clean:
  60. $(RM) $(OBJS)
  61. $(RM) $(BINDIR)
  62. $(RM) $(LIBDIR)
  63. install:
  64. uninstall:
  65. dist:
  66. $(MKDIR) $(DISTDIR)
  67. $(CP) $(BINDIR) $(LIBDIR) $(DISTDIR)
  68. .PHONY: default all prepare clean install uninstall dist