Makefile 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. ######################configure##################
  2. # OS=Windows,Linux,Android
  3. # ARCH=x86,x86_64,arm,aarch64
  4. # CC
  5. # CXX
  6. # CPPFLAGS += $(addprefix -D, $(DEFINES))
  7. # CPPFLAGS += $(addprefix -I, $(INCDIRS))
  8. # CFLAGS
  9. # CXXFLAGS
  10. # LDFLAGS += $(addprefix -L, $(LIBDIRS))
  11. # ENABLE_SHARED=true,false
  12. ifeq ($(OS), Windows_NT)
  13. OS=Windows
  14. endif
  15. MKDIR = mkdir -p
  16. RM = rm -r
  17. CP = cp -r
  18. CPPFLAGS += $(addprefix -D, $(DEFINES))
  19. ifeq ($(OS), Windows)
  20. CPPFLAGS += -D_WIN32_WINNT=0x600
  21. ifeq ($(ENABLE_SHARED),true)
  22. CPPFLAGS += -DDLL_EXPORTS
  23. endif
  24. endif
  25. CFLAGS += -g -Wall -O3
  26. ifeq ($(ENABLE_SHARED),true)
  27. CFLAGS += -shared -fPIC -fvisibility=hidden
  28. endif
  29. CXXFLAGS += $(CFLAGS) -std=c++11
  30. ARFLAGS := cr
  31. INCDIR = include
  32. LIBDIR = lib
  33. SRCDIR = src
  34. BINDIR = bin
  35. DEPDIR = 3rd
  36. CONFDIR = etc
  37. DISTDIR = dist
  38. DOCDIR = doc
  39. TARGET = test
  40. DIRS += $(shell find $(SRCDIR) -type d)
  41. SRCS += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c $(dir)/*.cc $(dir)/*.cpp))
  42. #OBJS := $(patsubst %.cpp, %.o, $(SRCS))
  43. OBJS := $(addsuffix .o, $(basename $(SRCS)))
  44. $(info TARGET=$(TARGET))
  45. $(info DIRS=$(DIRS))
  46. $(info SRCS=$(SRCS))
  47. $(info OBJS=$(OBJS))
  48. INCDIRS += $(INCDIR) $(DEPDIR)/include $(DIRS)
  49. CPPFLAGS += $(addprefix -I, $(INCDIRS))
  50. LIBDIRS += $(LIBDIR) $(DEPDIR)/lib
  51. LDFLAGS += $(addprefix -L, $(LIBDIRS))
  52. ifeq ($(OS), Windows)
  53. LDFLAGS += -static-libgcc -static-libstdc++
  54. LDFLAGS += -Wl,-Bstatic -lstdc++ -lpthread -lm
  55. LDFLAGS += -Wl,-Bdynamic -lwinmm -liphlpapi -lws2_32
  56. else
  57. LDFLAGS += -Wl,-Bdynamic -lstdc++ -lpthread -lm
  58. endif
  59. $(info OS=$(OS))
  60. $(info ARCH=$(ARCH))
  61. $(info MAKE=$(MAKE))
  62. $(info CC=$(CC))
  63. $(info CXX=$(CXX))
  64. $(info CPPFLAGS=$(CPPFLAGS))
  65. $(info CFLAGS=$(CFLAGS))
  66. $(info CXXFLAGS=$(CXXFLAGS))
  67. $(info LDFLAGS=$(LDFLAGS))
  68. default: all
  69. all: prepare $(TARGET)
  70. prepare:
  71. $(MKDIR) $(BINDIR) $(LIBDIR)
  72. $(TARGET): $(OBJS)
  73. # executable
  74. ifeq ($(OS), Windows)
  75. $(CXX) $(CXXFLAGS) $^ -o $(BINDIR)/$@.exe $(LDFLAGS)
  76. else
  77. $(CXX) $(CXXFLAGS) $^ -o $(BINDIR)/$@ $(LDFLAGS)
  78. endif
  79. # dynamic
  80. #ifeq ($(OS), Windows)
  81. #$(CXX) $(CXXFLAGS) $^ -o $(LIBDIR)/$@.dll $(LDFLAGS) -Wl,--output-def,$(LIBDIR)/$@.def
  82. #else
  83. #$(CXX) $(CXXFLAGS) $^ -o $(LIBDIR)/$@.so $(LDFLAGS)
  84. #endif
  85. # archive
  86. #$(AR) $(ARFLAGS) $(LIBDIR)/$@.a $^
  87. clean:
  88. $(RM) $(OBJS)
  89. $(RM) $(BINDIR)
  90. $(RM) $(LIBDIR)
  91. install:
  92. uninstall:
  93. dist:
  94. $(MKDIR) $(DISTDIR)
  95. $(CP) $(INCDIR) $(LIBDIR) $(BINDIR) $(DISTDIR)
  96. undist:
  97. $(RM) $(DISTDIR)
  98. .PHONY: default all prepare clean install uninstall dist undist