100 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.6 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
 | 
						||
 | 
						||
# Опции линкера
 | 
						||
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
 |