102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| # Компилятор и директория проекта
 | ||
| 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
 | ||
| 
 | ||
| # Опции линкера
 | ||
| LDFLAGS += --std=c++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
 |