TARGET = L2B SRC_FILES = main.cpp # Tyler's custom makefile extensions .DEFAULT_GOAL := all # Necessary so `make` doesn't run the "pack" target, as it is declared before "all" .PHONY: pack clean-run c run ## Adds only the necessary files for build into a .tar.gz file, named appropriately ARCHIVED_FILES = Makefile $(SRC_FILES) $(SRC_FILES:.cpp=.h) $(SRC_FILES:.cpp=.hpp) pack: tar --ignore-failed-read -czvf $(TARGET).tar.gz $(shell echo $(ARCHIVED_FILES) | xargs ls -d 2>/dev/null) ## Runs the pack target and then attempts to build & run the program to make sure it functions correctly pack-test: pack $(eval TMP := $(shell mktemp -d)) tar -xvzf $(TARGET).tar.gz --directory $(TMP) make -C $(TMP) $(TMP)/$(TARGET) rm -rf $(TMP) ## An extension of the clean command that is shorter to type and removes a potential .tar.gz file c: clean $(DEL) -f $(TARGET).tar.gz ## Simply builds and then executes the program run: all ./$(TARGET) # NO EDITS NEEDED BELOW THIS LINE CXX = g++ CXXFLAGS = -O2 CXXFLAGS_DEBUG = -g CXXFLAGS_WARN = -Wall -Wextra -Wunreachable-code -Wshadow -Wpedantic CPPVERSION = -std=c++17 OBJECTS = $(SRC_FILES:.cpp=.o) ifeq ($(shell echo "Windows"), "Windows") TARGET := $(TARGET).exe DEL = del Q = else DEL = rm -f Q = " endif all: $(TARGET) $(TARGET): $(OBJECTS) $(CXX) -o $@ $^ .cpp.o: $(CXX) $(CXXFLAGS) $(CPPVERSION) $(CXXFLAGS_DEBUG) $(CXXFLAGS_WARN) -o $@ -c $< clean: $(DEL) -f $(TARGET) $(OBJECTS) Makefile.bak depend: @sed -i.bak '/^# DEPENDENCIES/,$$d' Makefile @$(DEL) sed* @echo $(Q)# DEPENDENCIES$(Q) >> Makefile @$(CXX) -MM $(SRC_FILES) >> Makefile .PHONY: all clean depend # DEPENDENCIES main.o: main.cpp