# Build folder BUILD_DIR = build # Source files SOURCES = \ src/main.cpp \ src/bin.cpp # Output file name OUTPUT = json2bin_converter # Compiler and flags CXX = g++ CXXFLAGS = -std=c++17 -O2 LDFLAGS = # Deduce objects OBJECTS = $(SOURCES:%.cpp=$(BUILD_DIR)/%.o) # Verbose mode ifeq ($(VERBOSE), 1) Q := else Q := @ endif # Colors GREEN := \033[0;32m YELLOW := \033[1;33m RESET := \033[0m # Total number of files to process TOTAL_FILES := $(shell echo $$(($(words $(SOURCES))+1))) CURRENT_FILE = 0 # Default targets all: $(BUILD_DIR) $(OUTPUT) end # Create build directory $(BUILD_DIR): $(Q)mkdir -p $(dir $(OBJECTS)) # Link target $(OUTPUT): $(OBJECTS) @echo "[100%] $(YELLOW)Linking $(OUTPUT)$(RESET)" $(Q)$(CXX) $(LDFLAGS) -o $@ $(OBJECTS) # Build .o files from .cpp $(BUILD_DIR)/%.o: %.cpp $(eval CURRENT_FILE := $(shell echo $$(($(CURRENT_FILE)+1)))) $(eval PERCENTAGE := $(shell echo $$(($(CURRENT_FILE)*100/$(TOTAL_FILES))))) @echo "[$(PERCENTAGE)%] $(GREEN)Building $@$(RESET)" $(Q)mkdir -p $(dir $@) $(Q)$(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@ # Source files dependencies -include $(OBJECTS:.o=.d) end: @echo "Built target $(OUTPUT)" # Clean .PHONY: clean clean: $(Q)rm -rf $(BUILD_DIR)