####### Globals ####### CC = gcc CXX = g++ EXT = .exe ####### Folder names + output name ####### TARGET := $(notdir $(CURDIR)) BUILD := build SOURCES := src DATA := data INCLUDES := include ####### Compile flags ####### CFLAGS = -I./include/ -g -O2 -Wall -Wextra $(INCLUDE) CXXFLAGS = $(CFLAGS) -std=c++17 LDFLAGS = ####### Find all compilable files ####### FILES_C := $(shell find . -name *.c) FILES_CPP := $(shell find . -name *.cpp) FILES_SRC := $(shell find . -name *.s) ####### Generate list of all .o files ####### OBJS_C := $(foreach file,$(FILES_C),./$(BUILD)/$(subst ./$(SOURCES)/,,$(file:%.c=%.o))) OBJS_CPP := $(foreach file,$(FILES_CPP),./$(BUILD)/$(subst ./$(SOURCES)/,,$(file:%.cpp=%.o))) OBJS_SRC := $(foreach file,$(FILES_SRC),./$(BUILD)/$(subst ./$(SOURCES)/,,$(file:%.s=%.o))) ####### Rules ####### all: $(BUILD) .PHONY: clean all ####### Link and output .exe ####### $(BUILD): $(OBJS_C) $(OBJS_CPP) $(OBJS_SRC) @echo output ... $(TARGET)$(EXT) @$(CXX) $(LDFLAGS) -o $(TARGET) $(OBJS_C) $(OBJS_CPP) $(OBJS_SRC) ####### Compile .cpp to .o ####### $(OBJS_CPP): $(FILES_CPP) @echo $(notdir $<) @mkdir -p $(dir $@) @$(CXX) $(FLAGS) $(CXXFLAGS) -c -o $@ $< ####### Compile .s to .o ####### $(OBJS_SRC): $(FILES_SRC) @echo $(notdir $<) @mkdir -p $(dir $@) @$(CC) $(CFLAGS) -c -o $@ $< ####### Compile .c to .o ####### $(OBJS_C): $(FILES_C) @echo $(notdir $<) @mkdir -p $(dir $@) @$(CC) $(CFLAGS) -c -o $@ $< clean: rm -rf $(BUILD) rm -rf $(TARGET)$(EXT)
Comments
0 B
|👍
/👎
0 B
|👍
/👎