Makefile 2.9 KB

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