TARGET = CHANGEME SRC_FILES = main.cpp # Tyler's custom makefile extensions for CSCI200 (anyone can use these if they want) .DEFAULT_GOAL := all # Necessary so `make` doesn't run the "pack" target, as it is declared before "all" .PHONY: pack clean-run c run fmt ## 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: fmtc 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) ## Formats all cpp, h, and hpp files with clang-format, using my personal clang-format config fmt: find . -iname '*.hpp' -o -iname '*.h' -o -iname '*.cpp' | xargs clang-format --style=file:.clang-format -i ## Formats all cpp, h, and hpp files with clang-format, using the class clang-format config fmtc: find . -iname '*.hpp' -o -iname '*.h' -o -iname '*.cpp' | xargs clang-format --style=file:.class-clang-format -i ## Modifies the SRC_FILES variable to have all .cpp files in the repo setupsrc: sed -i "0,/SRC_FILE.\{0\}S = .*/ s//SRC_FILES = $(shell find . -iname '*.cpp' -printf '%P\n')/" Makefile ## Alias to setup SRC_FILES and then dependencies setup: setupsrc depend # 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