# makefile [PROVIDED] # Course toolchain: GCC 15.2, C++26. # Three build modes: # make -> debug (default): -g -O0, no sanitizers # make debug -> same as default # make sanitize -> debug + AddressSanitizer/UndefinedBehaviorSanitizer # make release -> optimized: -O2 -DNDEBUG, no sanitizers # make clean -> remove objects and the binary # # The autograder uses the sanitizer build, run `make sanitize` before submitting. CXX = g++ STD = -std=c++26 WARN = -Wall -Wextra -Wpedantic TARGET = inventory SRCS = main.cpp date.cpp items.cpp inventory.cpp command.cpp \ tokenizer.cpp file_reader.cpp factories.cpp # Default mode is debug; `make sanitize` / `make release` override CXXFLAGS. CXXFLAGS ?= $(STD) $(WARN) -g -O0 .PHONY: all debug sanitize release clean all: $(TARGET) debug: CXXFLAGS = $(STD) $(WARN) -g -O0 debug: clean $(TARGET) sanitize: CXXFLAGS = $(STD) $(WARN) -g -O0 -fsanitize=address,undefined sanitize: clean $(TARGET) release: CXXFLAGS = $(STD) $(WARN) -O2 -DNDEBUG release: clean $(TARGET) # Single-step build (compiles all sources together; simple and mode-safe). $(TARGET): $(SRCS) $(CXX) $(CXXFLAGS) -o $@ $(SRCS) clean: rm -f $(TARGET) *.o