56 lines
1.2 KiB
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)
|