# Input & Output Directories SOURCE_DIRECTORY = source INCLUDE_DIRECTORY = include BUILD_DIRECTORY = build # Clang-Tidy Configuration CLANG_TIDY_CHECKS = '-*,bugprone-*,clang-analyzer-*,concurrency-*,cppcoreguildelines-*,llvm-*,misc-*,modernize-*,performance-*,portability-*,readability-*,-readability-magic-numbers,-llvm-header-guard' CLANG_TIDY_FLAGS = -checks=$(CLANG_TIDY_CHECKS) -warnings-as-errors=* -quiet # All Sources & Objects SOURCES = $(wildcard $(SOURCE_DIRECTORY)/*.$(CC_EXTENSION)) OBJECTS = $(SOURCES:$(SOURCE_DIRECTORY)/%.$(CC_EXTENSION)=$(BUILD_DIRECTORY)/%.o) # Main Sources & Objects MAIN_SOURCES = $(filter-out $(SOURCE_DIRECTORY)/test.cc, $(SOURCES)) MAIN_OBJECTS = $(MAIN_SOURCES:$(SOURCE_DIRECTORY)/%.$(CC_EXTENSION)=$(BUILD_DIRECTORY)/%.o) # Test Sources & Objects TEST_SOURCES = $(filter-out $(SOURCE_DIRECTORY)/main.cc, $(SOURCES)) TEST_OBJECTS = $(TEST_SOURCES:$(SOURCE_DIRECTORY)/%.$(CC_EXTENSION)=$(BUILD_DIRECTORY)/%.o) # Compiler Configuration CC = clang++ CC_EXTENSION = cc CC_FLAGS = -std=c++23 -I $(INCLUDE_DIRECTORY) -Weverything -Wno-padded -Wno-c++98-compat -MMD -W-noc++98-compat-pedantic CC_DEPENDENCIES = $(OBJECTS:.o=.d) # Output Configuration NAME = book_store MAIN_OUTPUT = $(BUILD_DIRECTORY)/$(NAME) TEST_OUTPUT = $(BUILD_DIRECTORY)/$(NAME)_test