From f85955134cb80bb8d7cf4d04b0922bc8978ece33 Mon Sep 17 00:00:00 2001 From: Tyler Beckman Date: Thu, 19 Sep 2024 21:43:10 -0600 Subject: [PATCH] Overhaul makefile, improve y/n logic --- Makefile | 54 +++++++++++++++++++++++++++++++++++++++++++++++++----- main.cpp | 4 ++-- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 6bb17ba..7ed9e8b 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,68 @@ TARGET = L1B SRC_FILES = main.cpp -# NO EDITS BELOW THIS LINE +# 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) -std=c++17 -o $@ $^ + $(CXX) -o $@ $^ -%.o: %.cpp - $(CXX) -std=c++17 -o $@ -c $< +.cpp.o: + $(CXX) $(CXXFLAGS) $(CPPVERSION) $(CXXFLAGS_DEBUG) $(CXXFLAGS_WARN) -o $@ -c $< clean: - $(DEL) $(TARGET) $(OBJECTS) \ No newline at end of file + $(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 diff --git a/main.cpp b/main.cpp index a1a3180..a8f6431 100644 --- a/main.cpp +++ b/main.cpp @@ -60,11 +60,11 @@ int main(void) { std::cout << "This number is in the fourth quartile" << std::endl; } - char runAgainInput = 'N'; + char runAgainInput; std::cout << "Do you want another random value? (Y/N) "; std::cin >> runAgainInput; - if (runAgainInput == 'N') { + if (runAgainInput != 'Y' && runAgainInput != 'y') { std::cout << "Have a nice day!" << std::endl; break; }