uni/PRG24-sorting/makefile

56 lines
1.2 KiB
Makefile

# Makefile for a C++ project with optimizations
# Compiler
CXX = g++
# Compiler flags
CXXFLAGS = -std=c++20 -Wall
# Optimization flags
OPT_FLAGS = -O3 -march=native
# add Debug flags
# CXXFLAGS += -DDEBUG
PROFILE = performance
# Source file
ifneq (,$(findstring memory-,$(PROFILE)))
SRCS = memory.cpp quicksort.cpp mergesort.cpp
CXXFLAGS += -DFILL_$(subst memory-,,$(PROFILE))
else
SRCS = performance.cpp quicksort.cpp mergesort.cpp
endif
# Object files directory
BUILD_DIR = build
# Object files
OBJS = $(patsubst %.cpp,$(BUILD_DIR)/%.o,$(SRCS))
# Executable names
QUICK_SORT_TARGET = quicksort
MERGE_SORT_TARGET = mergesort
# Rule to build the quicksort executable
$(QUICK_SORT_TARGET): CXXFLAGS += -DQUICK_SORT
$(QUICK_SORT_TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(OPT_FLAGS) -o $@_$(PROFILE) $^
$(MAKE) clean-folder
# Rule to build the mergesort executable
$(MERGE_SORT_TARGET): CXXFLAGS += -DMERGE_SORT
$(MERGE_SORT_TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(OPT_FLAGS) -o $@_$(PROFILE) $^
$(MAKE) clean-folder
# Rule to build object files
$(BUILD_DIR)/%.o: %.cpp
@mkdir -p $(BUILD_DIR)
$(CXX) $(CXXFLAGS) -c -o $@ $<
# Clean rule
clean-folder:
rm -rf $(BUILD_DIR)
# Clean rule
clean:
rm -rf $(BUILD_DIR) $(QUICK_SORT_TARGET) $(MERGE_SORT_TARGET)