103 lines
2.7 KiB
Makefile
103 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
|
|||
|
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
|