Makefile 2.3 KB

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