164 lines
4.5 KiB
Makefile
164 lines
4.5 KiB
Makefile
# 项目信息
|
|
BINARY_NAME=nodeprobe
|
|
MODULE_NAME=github.com/meowrain/nodeprobe
|
|
MAIN_PATH=./cmd/nodeprobe
|
|
|
|
# Go 相关命令
|
|
GO=go
|
|
GOFLAGS=-v
|
|
GOBUILD=$(GO) build $(GOFLAGS)
|
|
GOCLEAN=$(GO) clean
|
|
GOTEST=$(GO) test
|
|
GOGET=$(GO) get
|
|
GOMOD=$(GO) mod
|
|
|
|
# 输出目录
|
|
BUILD_DIR=build
|
|
DIST_DIR=dist
|
|
|
|
# 版本信息
|
|
VERSION?=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")
|
|
LDFLAGS=-ldflags "-X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME) -X main.GitCommit=$(GIT_COMMIT)"
|
|
|
|
# 默认目标
|
|
.PHONY: all
|
|
all: clean build
|
|
|
|
# 构建
|
|
.PHONY: build
|
|
build:
|
|
@echo "Building $(BINARY_NAME)..."
|
|
@mkdir -p $(BUILD_DIR)
|
|
$(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)$(shell go env GOEXE) $(MAIN_PATH)
|
|
@echo "Build complete: $(BUILD_DIR)/$(BINARY_NAME)"
|
|
|
|
# 快速构建(不清理)
|
|
.PHONY: quick
|
|
quick:
|
|
@echo "Quick building $(BINARY_NAME)..."
|
|
@mkdir -p $(BUILD_DIR)
|
|
$(GOBUILD) -o $(BUILD_DIR)/$(BINARY_NAME)$(shell go env GOEXE) $(MAIN_PATH)
|
|
|
|
# 运行
|
|
.PHONY: run
|
|
run: build
|
|
@echo "Running $(BINARY_NAME)..."
|
|
@$(BUILD_DIR)/$(BINARY_NAME)$(shell go env GOEXE)
|
|
|
|
# 直接运行(不构建)
|
|
.PHONY: dev
|
|
dev:
|
|
@echo "Running $(BINARY_NAME) in development mode..."
|
|
$(GO) run $(MAIN_PATH)
|
|
|
|
# 测试
|
|
.PHONY: test
|
|
test:
|
|
@echo "Running tests..."
|
|
$(GOTEST) -v -cover ./...
|
|
|
|
# 测试覆盖率
|
|
.PHONY: coverage
|
|
coverage:
|
|
@echo "Running tests with coverage..."
|
|
$(GOTEST) -v -coverprofile=coverage.out ./...
|
|
$(GO) tool cover -html=coverage.out -o coverage.html
|
|
@echo "Coverage report generated: coverage.html"
|
|
|
|
# 清理
|
|
.PHONY: clean
|
|
clean:
|
|
@echo "Cleaning..."
|
|
$(GOCLEAN)
|
|
@rm -rf $(BUILD_DIR)
|
|
@rm -rf $(DIST_DIR)
|
|
@rm -f coverage.out coverage.html
|
|
@echo "Clean complete"
|
|
|
|
# 依赖管理
|
|
.PHONY: deps
|
|
deps:
|
|
@echo "Downloading dependencies..."
|
|
$(GOMOD) download
|
|
$(GOMOD) tidy
|
|
|
|
# 更新依赖
|
|
.PHONY: deps-update
|
|
deps-update:
|
|
@echo "Updating dependencies..."
|
|
$(GOGET) -u ./...
|
|
$(GOMOD) tidy
|
|
|
|
# 代码检查
|
|
.PHONY: lint
|
|
lint:
|
|
@echo "Running linter..."
|
|
@which golangci-lint > /dev/null || (echo "golangci-lint not found. Install it from https://golangci-lint.run/usage/install/" && exit 1)
|
|
golangci-lint run ./...
|
|
|
|
# 代码格式化
|
|
.PHONY: fmt
|
|
fmt:
|
|
@echo "Formatting code..."
|
|
$(GO) fmt ./...
|
|
|
|
# 代码审查
|
|
.PHONY: vet
|
|
vet:
|
|
@echo "Running go vet..."
|
|
$(GO) vet ./...
|
|
|
|
# 交叉编译(多平台)
|
|
.PHONY: build-all
|
|
build-all: clean
|
|
@echo "Building for multiple platforms..."
|
|
@mkdir -p $(DIST_DIR)
|
|
@echo "Building for Windows amd64..."
|
|
@GOOS=windows GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-windows-amd64.exe $(MAIN_PATH)
|
|
@echo "Building for Linux amd64..."
|
|
@GOOS=linux GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-linux-amd64 $(MAIN_PATH)
|
|
@echo "Building for Linux arm64..."
|
|
@GOOS=linux GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-linux-arm64 $(MAIN_PATH)
|
|
@echo "Building for macOS amd64..."
|
|
@GOOS=darwin GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-darwin-amd64 $(MAIN_PATH)
|
|
@echo "Building for macOS arm64..."
|
|
@GOOS=darwin GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(DIST_DIR)/$(BINARY_NAME)-darwin-arm64 $(MAIN_PATH)
|
|
@echo "All builds complete in $(DIST_DIR)/"
|
|
|
|
# 安装到系统
|
|
.PHONY: install
|
|
install: build
|
|
@echo "Installing $(BINARY_NAME)..."
|
|
$(GO) install $(LDFLAGS) $(MAIN_PATH)
|
|
@echo "Installed to $(shell go env GOPATH)/bin/$(BINARY_NAME)"
|
|
|
|
# 卸载
|
|
.PHONY: uninstall
|
|
uninstall:
|
|
@echo "Uninstalling $(BINARY_NAME)..."
|
|
@rm -f $(shell go env GOPATH)/bin/$(BINARY_NAME)$(shell go env GOEXE)
|
|
@echo "Uninstall complete"
|
|
|
|
# 帮助信息
|
|
.PHONY: help
|
|
help:
|
|
@echo "Available targets:"
|
|
@echo " make build - Build the binary"
|
|
@echo " make quick - Quick build without cleaning"
|
|
@echo " make run - Build and run the binary"
|
|
@echo " make dev - Run without building (using go run)"
|
|
@echo " make test - Run tests"
|
|
@echo " make coverage - Run tests with coverage report"
|
|
@echo " make clean - Clean build artifacts"
|
|
@echo " make deps - Download and tidy dependencies"
|
|
@echo " make deps-update - Update dependencies"
|
|
@echo " make lint - Run linter (requires golangci-lint)"
|
|
@echo " make fmt - Format code"
|
|
@echo " make vet - Run go vet"
|
|
@echo " make build-all - Build for multiple platforms"
|
|
@echo " make install - Install binary to GOPATH/bin"
|
|
@echo " make uninstall - Uninstall binary from GOPATH/bin"
|
|
@echo " make help - Show this help message"
|