|
| 1 | +# tool macros |
| 2 | +CXX := g++ |
| 3 | +#CXXFLAGS := -funsafe-math-optimizations -Ofast -flto=auto -funroll-all-loops -pipe -march=native -std=c++20 -Wall -Wextra `pkg-config --cflags --libs opencv4` |
| 4 | +CXXFLAGS := -funsafe-math-optimizations -Ofast -flto=auto -funroll-all-loops -pipe -march=native -std=c++20 -Wall -Wextra |
| 5 | +DBGFLAGS := -g |
| 6 | +CXXOBJFLAGS := $(CXXFLAGS) -c |
| 7 | +LFLAGS := -lncnn -lstdc++ -pthread -Wl,--gc-sections -flto -fopt-info-vec-optimized |
| 8 | + |
| 9 | +# path macros |
| 10 | +BIN_PATH := bin |
| 11 | +OBJ_PATH := obj |
| 12 | +SRC_PATH := src |
| 13 | +DBG_PATH := debug |
| 14 | + |
| 15 | +# compile macros |
| 16 | +TARGET_NAME := stablencnn |
| 17 | +ifeq ($(OS),Windows_NT) |
| 18 | + TARGET_NAME := $(addsuffix .exe,$(TARGET_NAME)) |
| 19 | +endif |
| 20 | +TARGET := $(BIN_PATH)/$(TARGET_NAME) |
| 21 | +TARGET_DEBUG := $(DBG_PATH)/$(TARGET_NAME) |
| 22 | + |
| 23 | +# src files & obj files |
| 24 | +SRC := $(foreach x, $(SRC_PATH), $(wildcard $(addprefix $(x)/*,.cpp))) |
| 25 | +OBJ := $(addprefix $(OBJ_PATH)/, $(addsuffix .o, $(notdir $(basename $(SRC))))) |
| 26 | +OBJ_DEBUG := $(addprefix $(DBG_PATH)/, $(addsuffix .o, $(notdir $(basename $(SRC))))) |
| 27 | + |
| 28 | +# clean files list |
| 29 | +DISTCLEAN_LIST := $(OBJ) \ |
| 30 | + $(OBJ_DEBUG) |
| 31 | +CLEAN_LIST := $(TARGET) \ |
| 32 | + $(TARGET_DEBUG) \ |
| 33 | + $(DISTCLEAN_LIST) |
| 34 | + |
| 35 | +# default rule |
| 36 | +default: makedir all |
| 37 | + |
| 38 | +# non-phony targets |
| 39 | +$(TARGET): $(OBJ) |
| 40 | + $(CXX) -o $@ $(OBJ) $(CXXFLAGS) $(LFLAGS) |
| 41 | + |
| 42 | +$(OBJ_PATH)/%.o: $(SRC_PATH)/%.cpp |
| 43 | + $(CXX) $(CXXOBJFLAGS) -o $@ $< |
| 44 | + |
| 45 | +$(DBG_PATH)/%.o: $(SRC_PATH)/%.cpp |
| 46 | + $(CXX) $(CXXOBJFLAGS) $(DBGFLAGS) -o $@ $< |
| 47 | + |
| 48 | +$(TARGET_DEBUG): $(OBJ_DEBUG) |
| 49 | + $(CXX) $(CXXFLAGS) $(DBGFLAGS) $(OBJ_DEBUG) -o $@ $(LFLAGS) |
| 50 | + |
| 51 | +# phony rules |
| 52 | +.PHONY: makedir |
| 53 | +makedir: |
| 54 | + @mkdir -p $(BIN_PATH) $(OBJ_PATH) $(DBG_PATH) |
| 55 | + |
| 56 | +.PHONY: all |
| 57 | +all: $(TARGET) |
| 58 | + |
| 59 | +.PHONY: debug |
| 60 | +debug: $(TARGET_DEBUG) |
| 61 | + |
| 62 | +.PHONY: clean |
| 63 | +clean: |
| 64 | + @echo CLEAN $(CLEAN_LIST) |
| 65 | + @rm -f $(CLEAN_LIST) |
| 66 | + |
| 67 | +.PHONY: distclean |
| 68 | +distclean: |
| 69 | + @echo CLEAN $(DISTCLEAN_LIST) |
| 70 | + @rm -f $(DISTCLEAN_LIST) |
0 commit comments