Makefile 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. endif
  55. #common LIBS
  56. ifeq ($(OS), Windows)
  57. LDFLAGS += -lwinmm -liphlpapi -lws2_32
  58. LDFLAGS += -Wl,-Bstatic -lstdc++ -lpthread -lm
  59. else
  60. ifeq ($(OS), Android)
  61. LDFLAGS += -llog -lm
  62. else
  63. LDFLAGS += -lstdc++ -lpthread -lm -ldl
  64. endif
  65. endif
  66. $(info OS=$(OS))
  67. $(info ARCH=$(ARCH))
  68. $(info MAKE=$(MAKE))
  69. $(info CC=$(CC))
  70. $(info CXX=$(CXX))
  71. $(info CPPFLAGS=$(CPPFLAGS))
  72. $(info CFLAGS=$(CFLAGS))
  73. $(info CXXFLAGS=$(CXXFLAGS))
  74. $(info LDFLAGS=$(LDFLAGS))
  75. default: all
  76. all: prepare $(TARGET)
  77. prepare:
  78. $(MKDIR) $(BINDIR) $(LIBDIR)
  79. $(TARGET): $(OBJS)
  80. # executable
  81. ifeq ($(OS), Windows)
  82. $(CXX) $(CXXFLAGS) $^ -o $(BINDIR)/$@.exe $(LDFLAGS)
  83. else
  84. $(CXX) $(CXXFLAGS) $^ -o $(BINDIR)/$@ $(LDFLAGS)
  85. endif
  86. # dynamic
  87. #ifeq ($(OS), Windows)
  88. #$(CXX) $(CXXFLAGS) $^ -o $(LIBDIR)/$@.dll $(LDFLAGS) -Wl,--output-def,$(LIBDIR)/$@.def
  89. #else
  90. #$(CXX) $(CXXFLAGS) $^ -o $(LIBDIR)/$@.so $(LDFLAGS)
  91. #endif
  92. # archive
  93. #$(AR) $(ARFLAGS) $(LIBDIR)/$@.a $^
  94. clean:
  95. $(RM) $(OBJS)
  96. $(RM) $(BINDIR)
  97. $(RM) $(LIBDIR)
  98. install:
  99. uninstall:
  100. dist:
  101. $(MKDIR) $(DISTDIR)
  102. $(CP) $(INCDIR) $(LIBDIR) $(BINDIR) $(DISTDIR)
  103. undist:
  104. $(RM) $(DISTDIR)
  105. .PHONY: default all prepare clean install uninstall dist undist