############################################################################### # # # DIRECTORIES # # # ############################################################################### # Project root directory, so everything will be relative to it: DIR_ROOT:= $(dir $(abspath $(MAKEFILE_LIST))) # Root directory for the source code: DIR_SOURCES:= $(addsuffix /, $(DIR_ROOT)source) # Executables will be here. DIR_BIN:= $(addsuffix /, $(DIR_ROOT)) # Directories for build artifacts (.o and .d files): DIR_BUILD:= $(addsuffix /, $(DIR_ROOT)build) INCLUDES:= -I$(DIR_SOURCES) ############################################################################### # # # FLAGS # # # ############################################################################### # Compiler flags (for the C++ compiler): CXXFLAGS:= -std=c++11 -Wall -Os -ffunction-sections -fdata-sections # Linker flags (SFML libraries): LDFLAGS:= -lSDL2 ############################################################################### # # # FILES # # # ############################################################################### SOURCES := $(shell find $(DIR_SOURCES) -name '*.cpp') OBJECTS := $(subst $(DIR_SOURCES), $(DIR_BUILD), $(SOURCES)) OBJECTS := $(OBJECTS:.cpp=.o) DEPENDENCIES:= $(OBJECTS:.o=.d) ############################################################################### # # # TARGETS # # # ############################################################################### TARGET_NAME:= coffee_crisis_arcade_edition TARGET_FILE:= $(DIR_BIN)$(TARGET_NAME) ############################################################################### # # # OTHER COMMANDS # # # ############################################################################### RM:= rm -rf ############################################################################### # # # RULES # # # ############################################################################### .PHONY: all a1 all: a1 a1: $(TARGET_FILE) $(TARGET_FILE): $(OBJECTS) mkdir -p $(@D) $(CXX) $(OBJECTS) $(LDFLAGS) -o $(TARGET_FILE) $(DIR_BUILD)%.o: $(DIR_SOURCES)%.cpp mkdir -p $(@D) $(CXX) -c $< $(CXXFLAGS) $(INCLUDES) -o $@ -include $(DEPENDENCIES) ############################################################################### # # # CLEAN # # # ############################################################################### .PHONY: clean clean: $(RM) $(DIR_BIN) $(DIR_BUILD) ############################################################################### # # # PRINT-VARIABLES # # # ############################################################################### .PHONY: print-variables print-variables: @echo MAKEFILE_LIST: $(MAKEFILE_LIST) @echo "DIR_ROOT :" $(DIR_ROOT) @echo "DIR_SOURCES:" $(DIR_SOURCES) @echo "DIR_BIN :" $(DIR_BIN) @echo "DIR_BUILD :" $(DIR_BUILD) @echo "DIR_IMGUI :" $(DIR_IMGUI) @echo "DIR_IMGUI_SFML:" $(DIR_IMGUI_SFML) @echo "INCLUDES :" $(INCLUDES) @echo CXX: $(CXX) @echo CXXFLAGS: $(CXXFLAGS) @echo LDFLAGS: $(LDFLAGS) @echo SOURCES: $(SOURCES) @echo OBJECTS: $(OBJECTS) @echo DEPENDENCIES: $(DEPENDENCIES) @echo TARGET_NAME: $(TARGET_NAME) @echo TARGET_FILE: $(TARGET_FILE) @echo RM: $(RM)