Makefile (874B)
1 CXX = c++ 2 CXXFLAGS = -Wall -Wextra -O3 -Isrc 3 LDFLAGS = -static 4 SRC_DIR = src 5 OBJ_DIR = build 6 BIN_DIR = bin 7 SRC_EXT = cpp 8 OBJ_EXT = o 9 10 # Find all source files recursively in subdirectories 11 SOURCES = $(shell find $(SRC_DIR) -name '*.$(SRC_EXT)') 12 # Create corresponding object files maintaining directory structure 13 OBJECTS = $(SOURCES:$(SRC_DIR)/%.$(SRC_EXT)=$(OBJ_DIR)/%.$(OBJ_EXT)) 14 EXEC = $(BIN_DIR)/fissh 15 16 # Get all unique subdirectories for build structure 17 OBJ_DIRS = $(sort $(dir $(OBJECTS))) 18 19 all: $(EXEC) 20 21 $(EXEC): $(OBJECTS) 22 @mkdir -p $(BIN_DIR) 23 $(CXX) $(OBJECTS) -o $(EXEC) $(LDFLAGS) 24 25 # Create object files, maintaining directory structure 26 $(OBJ_DIR)/%.$(OBJ_EXT): $(SRC_DIR)/%.$(SRC_EXT) 27 @mkdir -p $(dir $@) 28 $(CXX) $(CXXFLAGS) -c $< -o $@ 29 30 clean: 31 rm -rf $(OBJ_DIR) $(BIN_DIR) 32 33 install: $(EXEC) 34 install -m 755 $(EXEC) /usr/local/bin/ 35 36 .PHONY: all clean install