PKGS=libtiff-4 libpng DEFINES= EXE=prog BUILD_DIR=build/ INC_DIR=include/ # Source files SRC_DIR=src/ SRC_OBJ_DIR=$(BUILD_DIR)obj/src/ SRC_SRCS=$(shell find $(SRC_DIR) -iname \*.c) SRC_OBJS_sub=$(subst $(SRC_DIR),$(SRC_OBJ_DIR),$(SRC_SRCS)) SRC_OBJS=$(SRC_OBJS_sub:.c=.o) SRC_OBJ_DIRS_sub=$(shell find $(SRC_DIR) -type d) SRC_OBJ_DIRS=$(subst $(SRC_DIR),$(SRC_OBJ_DIR),$(SRC_OBJ_DIRS_sub)) $(info $(SRC_SRCS)) $(info $(SRC_OBJ_DIR)) $(info $(SRC_OBJ_DIRS)) $(info $(SRC_OBJS)) # Library files # Include raylib if we want a visual experience ifdef RAYLIB $(info Visual Experience Selected) PKGS+=raylib DEFINES+=-DVISUAL endif # Dump AVL tree info? ifdef AVL_INFO $(info Including AVL Dump) DEFINES+=-DAVL_INFO endif ifeq ($(shell uname -s),Linux) PKGCONF=pkgconf endif ifeq ($(shell uname -s),Darwin) PKGCONF=pkg-config endif CFLAGS= CFLAGS+=$(shell $(PKGCONF) --cflags $(PKGS)) CFLAGS+=-I$(INC_DIR) CFLAGS+=$(DEFINES) CFLAGS+=-Wall LDFLAGS= LDFLAGS+=$(shell $(PKGCONF) --libs $(PKGS)) default: clean build .PHONY: clean build run build: $(BUILD_DIR)$(EXE) $(BUILD_DIR)$(EXE): $(SRC_OBJS) @echo LD --\> $@ @gcc -o $@ $(LDFLAGS) $^ $(SRC_OBJ_DIR)%.o: $(SRC_DIR)%.c @echo CC $< --\> $@ @gcc -o $@ $(CFLAGS) -c $< clean: @echo Cleaning build files... @-rm -rf $(OBJ_DIR) $(BUILD_DIR) @mkdir -p $(BUILD_DIR) $(SRC_OBJ_DIRS) run: $(BUILD_DIR)$(EXE) @echo Executing... @./$(BUILD_DIR)$(EXE)