.PHONY: build clean run test install help # Переменные BINARY_NAME=vpn-client BINARY_UNIX=$(BINARY_NAME) BINARY_WINDOWS=$(BINARY_NAME).exe GO=go GOFLAGS=-ldflags="-s -w" # Цвета для вывода GREEN=\033[0;32m NC=\033[0m # No Color help: ## Показать справку @echo "Доступные команды:" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}' build: ## Собрать для текущей платформы @echo "$(GREEN)Сборка VPN Client...$(NC)" $(GO) mod download $(GO) build $(GOFLAGS) -o $(BINARY_NAME) main.go @echo "$(GREEN)✓ Сборка завершена: $(BINARY_NAME)$(NC)" build-all: ## Собрать для всех платформ @echo "$(GREEN)Сборка для всех платформ...$(NC)" @$(MAKE) build-linux @$(MAKE) build-windows @$(MAKE) build-darwin @echo "$(GREEN)✓ Сборка для всех платформ завершена$(NC)" build-linux: ## Собрать для Linux @echo "$(GREEN)Сборка для Linux...$(NC)" GOOS=linux GOARCH=amd64 $(GO) build $(GOFLAGS) -o $(BINARY_UNIX)-linux-amd64 main.go @echo "$(GREEN)✓ Linux: $(BINARY_UNIX)-linux-amd64$(NC)" build-windows: ## Собрать для Windows @echo "$(GREEN)Сборка для Windows...$(NC)" GOOS=windows GOARCH=amd64 $(GO) build $(GOFLAGS) -o $(BINARY_WINDOWS) main.go @echo "$(GREEN)✓ Windows: $(BINARY_WINDOWS)$(NC)" build-darwin: ## Собрать для macOS @echo "$(GREEN)Сборка для macOS...$(NC)" GOOS=darwin GOARCH=amd64 $(GO) build $(GOFLAGS) -o $(BINARY_UNIX)-darwin-amd64 main.go GOOS=darwin GOARCH=arm64 $(GO) build $(GOFLAGS) -o $(BINARY_UNIX)-darwin-arm64 main.go @echo "$(GREEN)✓ macOS Intel: $(BINARY_UNIX)-darwin-amd64$(NC)" @echo "$(GREEN)✓ macOS ARM: $(BINARY_UNIX)-darwin-arm64$(NC)" run: build ## Собрать и запустить @echo "$(GREEN)Запуск VPN Client...$(NC)" ./$(BINARY_NAME) test: ## Запустить тесты @echo "$(GREEN)Запуск тестов...$(NC)" $(GO) test -v ./... clean: ## Очистить собранные файлы @echo "$(GREEN)Очистка...$(NC)" $(GO) clean rm -f $(BINARY_NAME) rm -f $(BINARY_WINDOWS) rm -f $(BINARY_UNIX)-* @echo "$(GREEN)✓ Очистка завершена$(NC)" install: build ## Установить в систему @echo "$(GREEN)Установка VPN Client...$(NC)" @if [ "$(shell uname)" = "Linux" ] || [ "$(shell uname)" = "Darwin" ]; then \ sudo cp $(BINARY_NAME) /usr/local/bin/; \ sudo chmod +x /usr/local/bin/$(BINARY_NAME); \ echo "$(GREEN)✓ Установлено в /usr/local/bin/$(BINARY_NAME)$(NC)"; \ else \ echo "Установка поддерживается только на Linux и macOS"; \ fi uninstall: ## Удалить из системы @echo "$(GREEN)Удаление VPN Client...$(NC)" @if [ "$(shell uname)" = "Linux" ] || [ "$(shell uname)" = "Darwin" ]; then \ sudo rm -f /usr/local/bin/$(BINARY_NAME); \ echo "$(GREEN)✓ Удалено из /usr/local/bin/$(BINARY_NAME)$(NC)"; \ else \ echo "Удаление поддерживается только на Linux и macOS"; \ fi deps: ## Установить зависимости @echo "$(GREEN)Установка зависимостей...$(NC)" $(GO) mod download $(GO) mod tidy @echo "$(GREEN)✓ Зависимости установлены$(NC)" fmt: ## Форматировать код @echo "$(GREEN)Форматирование кода...$(NC)" $(GO) fmt ./... @echo "$(GREEN)✓ Код отформатирован$(NC)" lint: ## Проверить код линтером @echo "$(GREEN)Проверка кода...$(NC)" @if command -v golangci-lint > /dev/null; then \ golangci-lint run; \ else \ echo "golangci-lint не установлен. Установите: https://golangci-lint.run/usage/install/"; \ fi dev: ## Режим разработки (сборка и запуск при изменениях) @echo "$(GREEN)Режим разработки...$(NC)" @if command -v air > /dev/null; then \ air; \ else \ echo "air не установлен. Установите: go install github.com/cosmtrek/air@latest"; \ echo "Запуск обычной сборки..."; \ $(MAKE) run; \ fi size: build ## Показать размер бинарника @echo "$(GREEN)Размер бинарника:$(NC)" @ls -lh $(BINARY_NAME) | awk '{print $$5 " " $$9}' version: ## Показать версию Go @$(GO) version .DEFAULT_GOAL := help