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
|