only_the_truth/Makefile
radi0dev bd58ea66de 1
2026-01-30 16:48:11 +03:00

62 lines
1.8 KiB
Makefile

# Директории
SRC_DIR = src
INC_DIR = inc
LIB_DIR = lib
BUILD_DIR = build
# Исполняемый файл
EXECUTABLE = exec
# Компилятор и флаги
CXX = g++
# Флаги препроцессора
CPPFLAGS = -I$(INC_DIR)
# Флаги компилятора для C
CFLAGS = -pthread -Wall -Wextra -ggdb3 -O0
# Флаги компилятора, специфичные для C++
CXXFLAGS = $(CFLAGS) -std=c++17
# Флаги компоновщика
LDFLAGS = -pthread -L$(LIB_DIR)
# Библиотеки
LDLIBS = -pthread -lm
# Файлы
SOURCES = $(wildcard $(SRC_DIR)/*.cpp)
OBJECTS = $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(SOURCES))
# Форматтер
# Обрабатывает C/C++ файлы в src и inc. Если astyle не найден — выдаёт предупреждение, но не прерывает.
ASTYLE := $(shell command -v astyle 2>/dev/null || true)
SRC_FILES := $(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/*.cpp $(SRC_DIR)/*.h $(SRC_DIR)/*.hpp)
INC_FILES := $(wildcard $(INC_DIR)/*.c $(INC_DIR)/*.cpp $(INC_DIR)/*.h $(INC_DIR)/*.hpp)
# ==========
# Основная цель
all: $(BUILD_DIR) $(EXECUTABLE)
# Создание директории для сборки
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
# Сборка исполняемого файла
$(EXECUTABLE): $(OBJECTS)
$(CXX) $(LDFLAGS) $(OBJECTS) -o $(EXECUTABLE) $(LDLIBS)
# Компиляция объектных файлов
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp | $(BUILD_DIR)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
format:
ifneq ($(ASTYLE),)
@echo "Running astyle..."
@$(ASTYLE) --options=.astylerc $(SRC_FILES) $(INC_FILES)
else
@echo "astyle not found — skipping format"
endif
# Очистка
clean:
rm -rf $(EXECUTABLE) $(BUILD_DIR)
.PHONY: all clean