Makefile 3.0 KB

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