CXX = /usr/bin/g++ CXXFLAGS = -std=c++20 -MMD -MP -O3 SRCDIRS = $(wildcard */) IFLAGS = $(foreach dir,$(SRCDIRS), -I$(dir)) IFLAGS += $(foreach dir,$(SRCDIRS), -I../$(dir)) OBJECT_DIR = ../build LIB = ../libgzutil.a HEADER = $(wildcard *.hpp) $(wildcard */*.hpp) HEADER_INST = $($(notdir HEADER):%.hpp=$(OBJECT_DIR)/%.stamp) SRC = $(wildcard *.cpp) $(wildcard */*.cpp) # OBJECTS = $(SRC:%.cpp=$(OBJECT_DIR)/%.o) OBJECTS = $($(notdir SRC):%.cpp=$(OBJECT_DIR)/%.o) OBJECT_DIRS = $(OBJECT_DIR) $(foreach dir,$(SRCDIRS), $(OBJECT_DIR)/$(dir)) DEPENDS = ${OBJECTS:.o=.d} CXXFLAGS += $(IFLAGS) .PHONY: install debug run clean docs # # BUILDING # default: $(LIB) echo $(OBJECTS) # with debug flags debug: CXXFLAGS += -g +Wextra # -DDEBUG debug: default $(LIB): $(OBJECT_DIRS) $(OBJECTS) ar -cq $(LIB) $(OBJECTS) # include the makefiles generated by the -M flag -include $(DEPENDS) # rule for all ../build/*.o files $(OBJECT_DIR)/%.o: %.cpp $(CXX) -c $< -o $@ $(CXXFLAGS) $(LDFLAGS) $(LDLIBS) $(OBJECT_DIRS): mkdir -p $@ # # INSTALLATION # install: $(LIB) $(HEADER_INST) install -D -m 755 $< $(DESTDIR)/usr/lib/$(subst ../,,$<) install -D -m 755 ../gen_enum_str.py $(DESTDIR)/usr/bin/gz-enum-str $(OBJECT_DIR)/%.stamp: %.hpp $(OBJECT_DIR) install -D -m 644 $< $(DESTDIR)/usr/include/gz-util/$< touch $@ # # EXTRAS # # remove all object and dependecy files clean: -rm -r $(OBJECT_DIR) -rm $(LIB) docs: doxygen .doxygen_config