feat: add Makefile for building binaries across platforms
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,6 +4,7 @@
|
|||||||
*.dll
|
*.dll
|
||||||
*.so
|
*.so
|
||||||
*.dylib
|
*.dylib
|
||||||
|
bin/
|
||||||
|
|
||||||
# Test binary, built with `go test -c`
|
# Test binary, built with `go test -c`
|
||||||
*.test
|
*.test
|
||||||
|
|||||||
80
Makefile
Normal file
80
Makefile
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
.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 ""
|
||||||
Reference in New Issue
Block a user