# 项目信息 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"