# Компилятор и директория проекта ifeq ($(OS), Windows_NT) # С возможностью сборки x32 ifeq ($(MAKECMDGOALS), x32) CC = C:/MinGW/bin/g++.exe else CC = C:/MinGW64/bin/g++.exe endif PROJECT_DIR = $(shell echo %cd%) PATH_SEPARATOR = \\ # Имя исполняемого файла EXECUTABLE = $(notdir $(strip $(PROJECT_DIR))).exe else CC = g++ PROJECT_DIR = $(shell pwd) PATH_SEPARATOR = / # Имя исполняемого файла EXECUTABLE = $(notdir $(strip $(PROJECT_DIR))) endif # Опции компилятора CFLAGS += -c CFLAGS += -I./include CFLAGS += -I../dependencies/GLFW/include CFLAGS += -I../dependencies/glad/include CFLAGS += -I../dependencies/glm CFLAGS += -I../dependencies/stb CFLAGS += -I../dependencies/tinyobjloader CFLAGS += -I../dependencies/tinyglTF # Опции линкера LDFLAGS += --std=gnu++11 # Архитектурозависимые опции линкера ifeq ($(OS), Windows_NT) # GLFW в зависимости от архитектуры ifeq ($(MAKECMDGOALS), x32) LDFLAGS += -L../dependencies/GLFW/lib-mingw else LDFLAGS += -L../dependencies/GLFW/lib-mingw-w64 endif LDFLAGS += -static LDFLAGS += -lglfw3dll LDFLAGS += -lopengl32 else LDFLAGS += -lglfw LDFLAGS += -lGL endif # Библиотека GLAD GLAD := ../dependencies/glad/src/glad.c GLAD_O := $(GLAD:.c=.o) # Файлы из директории src SOURCES_C = $(wildcard src/*.c) SOURCES_CPP = $(wildcard src/*.cpp) # Директория с объектными файлами OBJ_DIR := Obj # Объектные файлы OBJECTS = $(addprefix $(OBJ_DIR)/,$(SOURCES_C:src/%.c=%.o) $(SOURCES_CPP:src/%.cpp=%.o)) # Для x32 сборки под Windows ifeq ($(OS), Windows_NT) ifeq ($(MAKECMDGOALS), x32) x32: all endif endif # Цель по умолчанию, зависит от EXECUTABLE all: $(EXECUTABLE) # Цель сборки исполняемого файла, зависит от OBJ_DIR, OBJECTS и GLAD_O $(EXECUTABLE): $(OBJ_DIR) $(OBJECTS) $(GLAD_O) $(CC) $(OBJECTS) $(GLAD_O) $(LDFLAGS) -o $@ # Цель для сборки GLAD $(GLAD_O): $(GLAD) $(CC) $(CFLAGS) $< -o $@ # Цель для создания директории с объектными файлами $(OBJ_DIR): @mkdir $(OBJ_DIR) # Цель сборки объектных файлов $(OBJ_DIR)/%.o: src/%.c $(CC) $(CFLAGS) $< -o $@ $(OBJ_DIR)/%.o: src/%.cpp $(CC) $(CFLAGS) $< -o $@ # Цель вывода всех файлов, учавствтующих в сборке list: @echo "В сборке участвуют:" $(OBJECTS) # Очистка ifeq ($(OS), Windows_NT) clean: $(OBJ_DIR) @rmdir /s /q $(OBJ_DIR) else clean: $(OBJ_DIR) @rm -f $(EXECUTABLE) $(OBJECTS) endif