03/Makefile

100 lines
2.6 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Компилятор и директория проекта
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