CXX=g++ FLAGS=-g -Wall -Wextra -std=gnu++2a LIBS=-pthread BIN_DIR=bin OBJ_DIR=build SRC_DIR=. INC_DIR=common INCLUDE=-I$(INC_DIR) HEADERS=$(wildcard $(SRC_DIR)/*.hpp) $(wildcard $(INC_DIR)/*.hpp) SOURCES=$(wildcard $(SRC_DIR)/*.cpp) INC_SOURCES=$(wildcard $(INC_DIR)/*.cpp) OBJECTS=$(SOURCES:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o) $(INC_SOURCES:$(INC_DIR)/%.cpp=$(OBJ_DIR)/%.o) EXECUTABLE=$(BIN_DIR)/$(shell basename `pwd`) all: $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) | $(BIN_DIR)/. $(CXX) $(FLAGS) $^ -o $@ $(LIBS) $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(HEADERS) | $(OBJ_DIR)/. $(CXX) -c $(FLAGS) $(INCLUDE) $< -o $@ $(OBJ_DIR)/%.o: $(INC_DIR)/%.cpp $(HEADERS) | $(OBJ_DIR)/. $(CXX) -c $(FLAGS) $(INCLUDE) $< -o $@ # Create dependency directories .PRECIOUS: %/. %/.: mkdir -p $(dir $@) .PHONY: lint lint: cpplint --filter=-build/c++11,-build/header_guard common/*.hpp common/*.cpp *.hpp *.cpp .PHONY: clean clean: rm -rf $(BIN_DIR) $(OBJ_DIR)