Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ####### 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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement