# +-------------+---------+-----------------------+ # | John Breaux | jab0910 | JohnBreaux@my.unt.edu | # +-------------+---------+-----------------------+ # | 2022-04-04 | # +-----------------------------------------------+ # ---------- Variables listed below --------- # # Executable TARGET := main.out # Paths to source, include, dependency, and object files SPATH = src IPATH = inc DPATH = dep OPATH = obj VPATH = $(SPATH) $(IPATH) $(DPATH) $(OPATH) # compiler and compiler flags CC = g++ CFLAGS = -I$(IPATH) -pthread -lrt # list of object files SOURCES = $(wildcard $(SPATH)/*.cpp) OBJECTS = $(addprefix $(OPATH)/,$(notdir $(SOURCES:.cpp=.o))) # ----------- Targets listed below ---------- # # Some targets aren't real .PHONY: all clean run dump # Don't autodelete object files: .PRECIOUS: $(OPATH)/%.o all: $(DPATH) $(OPATH) $(TARGET) dump: @echo SOURCES: $(SOURCES) @echo OBJECTS: $(OBJECTS) @echo TARGET: $(TARGET) @echo VPATH: $(VPATH) clean: -rm $(TARGET) -rm -r dep obj run: -$(addprefix ./,$(addsuffix ;,$(TARGET))) $(DPATH) $(OPATH): mkdir -p $@ # Make the executable(s) %.out: $(OBJECTS) $(CC) $(CFLAGS) -o $@ $^ # Make the object and dependency files $(OPATH)/%.o: $(SPATH)/%.cpp $(CC) $(CFLAGS) -MMD -MF $(DPATH)/$(@F:.o=.d) -o $@ -c $< # --------- Inclusions listed below --------- # # use dependencies when rebuilding -include $(wildcard $(DPATH)/*.d)