.PHONY: build build-linux build-windows build-all clean help # Variables BINARY_NAME=go-migrate CMD_PATH=./cmd/go_migrate OUTPUT_DIR=bin VERSION?=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") BUILD_TIME=$(shell date -u '+%Y-%m-%d_%H:%M:%S') GIT_COMMIT=$(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown") # Flags de compilación LD_FLAGS=-ldflags="-s -w -X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME) -X main.GitCommit=$(GIT_COMMIT)" # Default: compilar para el SO actual build: build-$(OS) ifeq ($(OS),Windows_NT) build-native: build-windows else build-native: build-linux endif # Compilar para Linux (sin CGO para máxima compatibilidad) build-linux: @echo "Compilando para Linux..." @mkdir -p $(OUTPUT_DIR) CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ $(LD_FLAGS) \ -o $(OUTPUT_DIR)/$(BINARY_NAME)-linux-amd64 \ $(CMD_PATH) @echo "Binario creado: $(OUTPUT_DIR)/$(BINARY_NAME)-linux-amd64" # Compilar para Windows build-windows: @echo "Compilando para Windows..." @mkdir -p $(OUTPUT_DIR) CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build \ $(LD_FLAGS) \ -o $(OUTPUT_DIR)/$(BINARY_NAME)-windows-amd64.exe \ $(CMD_PATH) @echo "Binario creado: $(OUTPUT_DIR)/$(BINARY_NAME)-windows-amd64.exe" # Compilar para ambas plataformas build-all: build-linux build-windows @echo "" @echo "Binarios compilados:" @ls -lh $(OUTPUT_DIR)/$(BINARY_NAME)* # Compilar para Linux arm64 (opcional, para Raspberry Pi, etc.) build-linux-arm64: @echo "Compilando para Linux ARM64..." @mkdir -p $(OUTPUT_DIR) CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build \ $(LD_FLAGS) \ -o $(OUTPUT_DIR)/$(BINARY_NAME)-linux-arm64 \ $(CMD_PATH) @echo "Binario creado: $(OUTPUT_DIR)/$(BINARY_NAME)-linux-arm64" # Limpiar binarios clean: @echo "Limpiando binarios..." @rm -rf $(OUTPUT_DIR) @echo "Limpieza completada" # Ayuda help: @echo "Comandos disponibles:" @echo "" @echo " make build - Compilar para el SO actual (Linux/Windows)" @echo " make build-linux - Compilar para Linux x86_64" @echo " make build-windows - Compilar para Windows x86_64" @echo " make build-linux-arm64 - Compilar para Linux ARM64 (opcional)" @echo " make build-all - Compilar para Linux y Windows" @echo " make clean - Eliminar binarios compilados" @echo " make help - Mostrar esta ayuda" @echo "" @echo "Ejemplos de uso:" @echo " make build-all # Crear binarios para ambas plataformas" @echo " make build-linux OS= # Crear solo para Linux" @echo ""