Files
Go-VPN-Client/Makefile
2026-04-05 20:33:30 +06:00

120 lines
4.5 KiB
Makefile

.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