-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathMakefile
More file actions
executable file
·490 lines (410 loc) · 20.2 KB
/
Makefile
File metadata and controls
executable file
·490 lines (410 loc) · 20.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
# veo Makefile
# 整合编译、优化和发布流程
# 项目配置
PROJECT_NAME := veo
VERSION ?= v1.0.0
BUILD_DIR := dist
RELEASE_DIR := release
BUILD_SCRIPT := ./build.sh
OUTPUT_DIR := $(BUILD_DIR)
# Go 编译配置
MAIN_FILE := ./cmd/main.go
GO_VERSION := $(shell go version | awk '{print $$3}')
GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
BUILD_TIME := $(shell date +"%Y-%m-%d_%H:%M:%S")
# Build Tags
# 默认构建:主动模式(不带 tag)
# 被动代理模式:go build -tags passive
PASSIVE_TAG := passive
PASSIVE_BUILD_DIR := $(BUILD_DIR)/passive
PASSIVE_RELEASE_DIR := $(RELEASE_DIR)/passive
# 编译标志
LDFLAGS := -s -w -buildid=
LDFLAGS += -X main.version=$(VERSION)
LDFLAGS += -X main.buildTime=$(BUILD_TIME)
LDFLAGS += -X main.gitCommit=$(GIT_COMMIT)
LDFLAGS += -X main.gitBranch=$(GIT_BRANCH)
BUILDFLAGS := -trimpath
GCFLAGS := all=-dwarf=false
ASMFLAGS := all=-trimpath=$(CURDIR)
CGO_ENABLED := 0
# 支持的平台
PLATFORMS := \
windows/amd64 \
windows/arm64 \
windows/386 \
linux/amd64 \
linux/arm64 \
linux/arm \
darwin/amd64 \
darwin/arm64
# 颜色输出
BLUE := \033[34m
GREEN := \033[32m
YELLOW := \033[33m
RED := \033[31m
RESET := \033[0m
# 默认目标
.DEFAULT_GOAL := help
# ============================================================================
# 帮助信息
# ============================================================================
.PHONY: help
help: ## 显示帮助信息
@echo "$(BLUE)veo Makefile$(RESET)"
@echo "=========================================="
@echo ""
@echo "$(GREEN)构建命令:$(RESET)"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " $(YELLOW)%-15s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST)
@echo ""
@echo "$(GREEN)示例:$(RESET)"
@echo " make build # 编译当前平台(主动模式,默认)"
@echo " make build-passive # 编译当前平台(被动代理模式,-tags passive)"
@echo " make build-both # 同时编译主动+被动(当前平台)"
@echo " make build-all # 编译所有平台(主动模式)"
@echo " make build-all-passive # 编译所有平台(被动模式,输出到 dist/passive)"
@echo " make release # 创建发布包"
@echo " make clean # 清理构建文件"
# ============================================================================
# 清理命令
# ============================================================================
.PHONY: clean
clean: ## 清理所有构建文件
@echo "$(BLUE)[CLEAN]$(RESET) 清理构建文件..."
@rm -rf $(BUILD_DIR) $(RELEASE_DIR)
@echo "$(GREEN)[SUCCESS]$(RESET) 清理完成"
.PHONY: clean-dist
clean-dist: ## 清理编译输出
@echo "$(BLUE)[CLEAN]$(RESET) 清理编译输出..."
@rm -rf $(BUILD_DIR)
.PHONY: clean-release
clean-release: ## 清理发布文件
@echo "$(BLUE)[CLEAN]$(RESET) 清理发布文件..."
@rm -rf $(RELEASE_DIR)
# ============================================================================
# 准备工作
# ============================================================================
.PHONY: deps
deps: ## 下载依赖包
@echo "$(BLUE)[DEPS]$(RESET) 下载依赖包..."
@go mod download
@go mod tidy
@echo "$(GREEN)[SUCCESS]$(RESET) 依赖包下载完成"
.PHONY: verify
verify: ## 验证依赖包
@echo "$(BLUE)[VERIFY]$(RESET) 验证依赖包..."
@go mod verify
@echo "$(GREEN)[SUCCESS]$(RESET) 依赖包验证完成"
.PHONY: check
check: ## 检查代码
@echo "$(BLUE)[CHECK]$(RESET) 检查代码..."
@go vet ./...
@go fmt ./...
@echo "$(GREEN)[SUCCESS]$(RESET) 代码检查完成"
# ============================================================================
# 编译命令
# ============================================================================
.PHONY: build
build: deps ## 编译当前平台(主动模式,默认)
@echo "$(BLUE)[BUILD]$(RESET) 编译当前平台(主动模式)..."
@mkdir -p $(BUILD_DIR)
@CGO_ENABLED=$(CGO_ENABLED) go build $(BUILDFLAGS) -gcflags="$(GCFLAGS)" -asmflags="$(ASMFLAGS)" -ldflags="$(LDFLAGS)" -o $(BUILD_DIR)/$(PROJECT_NAME) $(MAIN_FILE)
@echo "$(GREEN)[SUCCESS]$(RESET) 编译完成: $(BUILD_DIR)/$(PROJECT_NAME)"
.PHONY: build-passive
build-passive: deps ## 编译当前平台(被动代理模式,-tags passive)
@echo "$(BLUE)[BUILD]$(RESET) 编译当前平台(被动代理模式)..."
@mkdir -p $(PASSIVE_BUILD_DIR)
@CGO_ENABLED=$(CGO_ENABLED) go build $(BUILDFLAGS) -tags $(PASSIVE_TAG) -gcflags="$(GCFLAGS)" -asmflags="$(ASMFLAGS)" -ldflags="$(LDFLAGS)" -o $(PASSIVE_BUILD_DIR)/$(PROJECT_NAME) $(MAIN_FILE)
@echo "$(GREEN)[SUCCESS]$(RESET) 编译完成: $(PASSIVE_BUILD_DIR)/$(PROJECT_NAME)"
.PHONY: build-both
build-both: build build-passive ## 同时编译主动+被动(当前平台)
.PHONY: build-all
build-all: ## 编译所有平台(主动模式)
@echo "$(BLUE)[BUILD-ALL]$(RESET) 编译所有平台(主动模式)..."
@VERSION=$(VERSION) ./build.sh -a
.PHONY: build-all-passive
build-all-passive: ## 编译所有平台(被动代理模式,输出到 dist/passive)
@echo "$(BLUE)[BUILD-ALL]$(RESET) 编译所有平台(被动代理模式)..."
@mkdir -p $(PASSIVE_BUILD_DIR)
@VERSION=$(VERSION) GOFLAGS="-tags=$(PASSIVE_TAG)" ./build.sh -a -o $(PASSIVE_BUILD_DIR)
.PHONY: build-all-both
build-all-both: build-all build-all-passive ## 编译所有平台(主动+被动)
.PHONY: build-windows
build-windows: ## 编译 Windows 平台(主动模式)
@echo "$(BLUE)[BUILD]$(RESET) 编译 Windows 平台(主动模式)..."
@mkdir -p $(BUILD_DIR)
@CGO_ENABLED=$(CGO_ENABLED) GOOS=windows GOARCH=amd64 go build $(BUILDFLAGS) -gcflags="$(GCFLAGS)" -asmflags="$(ASMFLAGS)" -ldflags="$(LDFLAGS)" -o $(BUILD_DIR)/$(PROJECT_NAME)_windows_amd64.exe $(MAIN_FILE)
@echo "$(GREEN)[SUCCESS]$(RESET) Windows 编译完成"
.PHONY: build-windows-passive
build-windows-passive: ## 编译 Windows 平台(被动代理模式)
@echo "$(BLUE)[BUILD]$(RESET) 编译 Windows 平台(被动代理模式)..."
@mkdir -p $(PASSIVE_BUILD_DIR)
@CGO_ENABLED=$(CGO_ENABLED) GOOS=windows GOARCH=amd64 go build $(BUILDFLAGS) -tags $(PASSIVE_TAG) -gcflags="$(GCFLAGS)" -asmflags="$(ASMFLAGS)" -ldflags="$(LDFLAGS)" -o $(PASSIVE_BUILD_DIR)/$(PROJECT_NAME)_windows_amd64.exe $(MAIN_FILE)
@echo "$(GREEN)[SUCCESS]$(RESET) Windows 被动模式编译完成"
.PHONY: build-windows-both
build-windows-both: build-windows build-windows-passive ## 编译 Windows 平台(主动+被动)
.PHONY: build-linux
build-linux: ## 编译 Linux 平台(主动模式)
@echo "$(BLUE)[BUILD]$(RESET) 编译 Linux 平台(主动模式)..."
@mkdir -p $(BUILD_DIR)
@CGO_ENABLED=$(CGO_ENABLED) GOOS=linux GOARCH=amd64 go build $(BUILDFLAGS) -gcflags="$(GCFLAGS)" -asmflags="$(ASMFLAGS)" -ldflags="$(LDFLAGS)" -o $(BUILD_DIR)/$(PROJECT_NAME)_linux_amd64 $(MAIN_FILE)
@echo "$(GREEN)[SUCCESS]$(RESET) Linux 编译完成"
.PHONY: build-linux-passive
build-linux-passive: ## 编译 Linux 平台(被动代理模式)
@echo "$(BLUE)[BUILD]$(RESET) 编译 Linux 平台(被动代理模式)..."
@mkdir -p $(PASSIVE_BUILD_DIR)
@CGO_ENABLED=$(CGO_ENABLED) GOOS=linux GOARCH=amd64 go build $(BUILDFLAGS) -tags $(PASSIVE_TAG) -gcflags="$(GCFLAGS)" -asmflags="$(ASMFLAGS)" -ldflags="$(LDFLAGS)" -o $(PASSIVE_BUILD_DIR)/$(PROJECT_NAME)_linux_amd64 $(MAIN_FILE)
@echo "$(GREEN)[SUCCESS]$(RESET) Linux 被动模式编译完成"
.PHONY: build-linux-both
build-linux-both: build-linux build-linux-passive ## 编译 Linux 平台(主动+被动)
.PHONY: build-darwin
build-darwin: ## 编译 macOS 平台(主动模式)
@echo "$(BLUE)[BUILD]$(RESET) 编译 macOS 平台(主动模式)..."
@mkdir -p $(BUILD_DIR)
@CGO_ENABLED=$(CGO_ENABLED) GOOS=darwin GOARCH=amd64 go build $(BUILDFLAGS) -gcflags="$(GCFLAGS)" -asmflags="$(ASMFLAGS)" -ldflags="$(LDFLAGS)" -o $(BUILD_DIR)/$(PROJECT_NAME)_darwin_amd64 $(MAIN_FILE)
@CGO_ENABLED=$(CGO_ENABLED) GOOS=darwin GOARCH=arm64 go build $(BUILDFLAGS) -gcflags="$(GCFLAGS)" -asmflags="$(ASMFLAGS)" -ldflags="$(LDFLAGS)" -o $(BUILD_DIR)/$(PROJECT_NAME)_darwin_arm64 $(MAIN_FILE)
@echo "$(GREEN)[SUCCESS]$(RESET) macOS 编译完成"
.PHONY: build-darwin-passive
build-darwin-passive: ## 编译 macOS 平台(被动代理模式)
@echo "$(BLUE)[BUILD]$(RESET) 编译 macOS 平台(被动代理模式)..."
@mkdir -p $(PASSIVE_BUILD_DIR)
@CGO_ENABLED=$(CGO_ENABLED) GOOS=darwin GOARCH=amd64 go build $(BUILDFLAGS) -tags $(PASSIVE_TAG) -gcflags="$(GCFLAGS)" -asmflags="$(ASMFLAGS)" -ldflags="$(LDFLAGS)" -o $(PASSIVE_BUILD_DIR)/$(PROJECT_NAME)_darwin_amd64 $(MAIN_FILE)
@CGO_ENABLED=$(CGO_ENABLED) GOOS=darwin GOARCH=arm64 go build $(BUILDFLAGS) -tags $(PASSIVE_TAG) -gcflags="$(GCFLAGS)" -asmflags="$(ASMFLAGS)" -ldflags="$(LDFLAGS)" -o $(PASSIVE_BUILD_DIR)/$(PROJECT_NAME)_darwin_arm64 $(MAIN_FILE)
@echo "$(GREEN)[SUCCESS]$(RESET) macOS 被动模式编译完成"
.PHONY: build-darwin-both
build-darwin-both: build-darwin build-darwin-passive ## 编译 macOS 平台(主动+被动)
# ============================================================================
# 优化命令
# ============================================================================
.PHONY: build-optimized
build-optimized: deps ## 编译优化版本(主动模式)
@echo "$(BLUE)[BUILD-OPT]$(RESET) 编译优化版本(主动模式)..."
@VERSION=$(VERSION) ./build.sh
.PHONY: build-optimized-passive
build-optimized-passive: deps ## 编译优化版本(被动代理模式,-tags passive)
@echo "$(BLUE)[BUILD-OPT]$(RESET) 编译优化版本(被动代理模式)..."
@mkdir -p $(PASSIVE_BUILD_DIR)
@VERSION=$(VERSION) GOFLAGS="-tags=$(PASSIVE_TAG)" ./build.sh -o $(PASSIVE_BUILD_DIR)
.PHONY: build-optimized-both
build-optimized-both: build-optimized build-optimized-passive ## 编译优化版本(主动+被动)
.PHONY: build-debug
build-debug: deps ## 编译调试版本(主动模式)
@echo "$(BLUE)[BUILD-DEBUG]$(RESET) 编译调试版本(主动模式)..."
@VERSION=$(VERSION) ./build.sh --with-debug
.PHONY: build-debug-passive
build-debug-passive: deps ## 编译调试版本(被动代理模式,-tags passive)
@echo "$(BLUE)[BUILD-DEBUG]$(RESET) 编译调试版本(被动代理模式)..."
@mkdir -p $(PASSIVE_BUILD_DIR)
@VERSION=$(VERSION) GOFLAGS="-tags=$(PASSIVE_TAG)" ./build.sh --with-debug -o $(PASSIVE_BUILD_DIR)
.PHONY: build-debug-both
build-debug-both: build-debug build-debug-passive ## 编译调试版本(主动+被动)
.PHONY: compress
compress: ## UPX压缩现有二进制文件(包含 dist/ 与 dist/passive/)
@echo "$(BLUE)[COMPRESS]$(RESET) 压缩二进制文件..."
@if command -v upx >/dev/null 2>&1; then \
for dir in $(BUILD_DIR) $(PASSIVE_BUILD_DIR); do \
if [ ! -d "$$dir" ]; then continue; fi; \
for file in "$$dir"/*; do \
if [ -f "$$file" ] && [ -x "$$file" ]; then \
echo "压缩: $$file"; \
upx --best --lzma "$$file" 2>/dev/null || echo "跳过: $$file"; \
fi; \
done; \
done; \
echo "$(GREEN)[SUCCESS]$(RESET) 压缩完成"; \
else \
echo "$(YELLOW)[WARNING]$(RESET) UPX 未安装,跳过压缩"; \
fi
# ============================================================================
# 测试命令
# ============================================================================
.PHONY: test
test: ## 运行测试(主动模式,默认)
@echo "$(BLUE)[TEST]$(RESET) 运行测试(主动模式)..."
@go test -v ./...
.PHONY: test-passive
test-passive: ## 运行测试(被动代理模式,-tags passive)
@echo "$(BLUE)[TEST]$(RESET) 运行测试(被动代理模式)..."
@go test -tags $(PASSIVE_TAG) -v ./...
.PHONY: test-both
test-both: test test-passive ## 运行测试(主动+被动)
.PHONY: test-race
test-race: ## 运行竞态检测测试(主动模式)
@echo "$(BLUE)[TEST-RACE]$(RESET) 运行竞态检测测试(主动模式)..."
@go test -race -v ./...
.PHONY: test-race-passive
test-race-passive: ## 运行竞态检测测试(被动代理模式,-tags passive)
@echo "$(BLUE)[TEST-RACE]$(RESET) 运行竞态检测测试(被动代理模式)..."
@go test -tags $(PASSIVE_TAG) -race -v ./...
.PHONY: test-race-both
test-race-both: test-race test-race-passive ## 运行竞态检测测试(主动+被动)
.PHONY: bench
bench: ## 运行性能测试
@echo "$(BLUE)[BENCH]$(RESET) 运行性能测试..."
@go test -bench=. -benchmem ./...
.PHONY: coverage
coverage: ## 生成测试覆盖率报告
@echo "$(BLUE)[COVERAGE]$(RESET) 生成测试覆盖率报告..."
@go test -coverprofile=coverage.out ./...
@go tool cover -html=coverage.out -o coverage.html
@echo "$(GREEN)[SUCCESS]$(RESET) 覆盖率报告: coverage.html"
# ============================================================================
# 发布命令
# ============================================================================
.PHONY: release
release: build-all ## 创建发布包(主动模式)
@echo "$(BLUE)[RELEASE]$(RESET) 创建发布包(主动模式)..."
@VERSION=$(VERSION) ./release.sh
.PHONY: release-passive
release-passive: build-all-passive ## 创建发布包(被动代理模式)
@echo "$(BLUE)[RELEASE]$(RESET) 创建发布包(被动代理模式)..."
@mkdir -p $(PASSIVE_RELEASE_DIR)
@VERSION=$(VERSION) ./release.sh -b $(PASSIVE_BUILD_DIR) -r $(PASSIVE_RELEASE_DIR)
.PHONY: release-both
release-both: release release-passive ## 创建发布包(主动+被动)
.PHONY: release-clean
release-clean: clean-release build-all ## 清理并创建发布包(主动模式)
@echo "$(BLUE)[RELEASE-CLEAN]$(RESET) 清理并创建发布包(主动模式)..."
@VERSION=$(VERSION) ./release.sh
.PHONY: release-clean-passive
release-clean-passive: clean-release build-all-passive ## 清理并创建发布包(被动代理模式)
@echo "$(BLUE)[RELEASE-CLEAN]$(RESET) 清理并创建发布包(被动代理模式)..."
@mkdir -p $(PASSIVE_RELEASE_DIR)
@VERSION=$(VERSION) ./release.sh -b $(PASSIVE_BUILD_DIR) -r $(PASSIVE_RELEASE_DIR)
.PHONY: release-clean-both
release-clean-both: release-clean release-clean-passive ## 清理并创建发布包(主动+被动)
# ============================================================================
# 开发命令
# ============================================================================
.PHONY: dev
dev: build ## 开发模式 (编译并运行)
@echo "$(BLUE)[DEV]$(RESET) 开发模式..."
@$(BUILD_DIR)/$(PROJECT_NAME) --help
.PHONY: install
install: build ## 安装到系统
@echo "$(BLUE)[INSTALL]$(RESET) 安装到系统..."
@sudo cp $(BUILD_DIR)/$(PROJECT_NAME) /usr/local/bin/
@echo "$(GREEN)[SUCCESS]$(RESET) 安装完成: /usr/local/bin/$(PROJECT_NAME)"
.PHONY: uninstall
uninstall: ## 从系统卸载
@echo "$(BLUE)[UNINSTALL]$(RESET) 从系统卸载..."
@sudo rm -f /usr/local/bin/$(PROJECT_NAME)
@echo "$(GREEN)[SUCCESS]$(RESET) 卸载完成"
# ============================================================================
# 质量检查
# ============================================================================
.PHONY: lint
lint: ## 代码检查
@echo "$(BLUE)[LINT]$(RESET) 代码检查..."
@if command -v golangci-lint >/dev/null 2>&1; then \
golangci-lint run; \
else \
echo "$(YELLOW)[WARNING]$(RESET) golangci-lint 未安装,使用 go vet"; \
go vet ./...; \
fi
.PHONY: fmt
fmt: ## 格式化代码
@echo "$(BLUE)[FMT]$(RESET) 格式化代码..."
@go fmt ./...
@echo "$(GREEN)[SUCCESS]$(RESET) 代码格式化完成"
.PHONY: mod-update
mod-update: ## 更新依赖包
@echo "$(BLUE)[MOD-UPDATE]$(RESET) 更新依赖包..."
@go get -u ./...
@go mod tidy
@echo "$(GREEN)[SUCCESS]$(RESET) 依赖包更新完成"
# ============================================================================
# 信息命令
# ============================================================================
.PHONY: info
info: ## 显示构建信息
@echo "$(BLUE)构建信息$(RESET)"
@echo "=================================="
@echo "项目名称: $(PROJECT_NAME)"
@echo "版本: $(VERSION)"
@echo "Go版本: $(GO_VERSION)"
@echo "Git提交: $(GIT_COMMIT)"
@echo "Git分支: $(GIT_BRANCH)"
@echo "构建时间: $(BUILD_TIME)"
@echo "构建目录: $(BUILD_DIR)"
@echo "发布目录: $(RELEASE_DIR)"
@echo ""
@echo "$(BLUE)支持平台$(RESET)"
@echo "=================================="
@for platform in $(PLATFORMS); do echo " $$platform"; done
.PHONY: size
size: ## 显示二进制文件大小
@echo "$(BLUE)[SIZE]$(RESET) 二进制文件大小:"
@if [ -d "$(BUILD_DIR)" ]; then \
ls -lh $(BUILD_DIR)/ | tail -n +2 | awk '{print " " $$9 ": " $$5}'; \
else \
echo " $(YELLOW)[WARNING]$(RESET) 构建目录不存在,请先运行 make build"; \
fi
# ============================================================================
# 特殊目标
# ============================================================================
.PHONY: docker-build
docker-build: ## Docker 构建
@echo "$(BLUE)[DOCKER]$(RESET) Docker 构建..."
@docker build -t $(PROJECT_NAME):$(VERSION) .
@echo "$(GREEN)[SUCCESS]$(RESET) Docker 镜像构建完成"
.PHONY: quick
quick: clean-dist build ## 快速构建 (清理+编译)
@echo "$(GREEN)[SUCCESS]$(RESET) 快速构建完成"
.PHONY: all
all: clean deps check test build-all compress ## 完整构建流程(主动模式)
@echo "$(GREEN)[SUCCESS]$(RESET) 完整构建流程完成"
.PHONY: all-both
all-both: clean deps check test-both build-all-both compress ## 完整构建流程(主动+被动)
@echo "$(GREEN)[SUCCESS]$(RESET) 完整构建流程完成(主动+被动)"
# ============================================================================
# 文件目标
# ============================================================================
# 防止文件名冲突
.PHONY: build build-passive build-both build-all build-all-passive build-all-both \
build-windows build-windows-passive build-windows-both \
build-linux build-linux-passive build-linux-both \
build-darwin build-darwin-passive build-darwin-both \
build-optimized build-optimized-passive build-optimized-both \
build-debug build-debug-passive build-debug-both \
compress clean clean-dist clean-release \
deps verify check test test-passive test-both test-race test-race-passive test-race-both bench coverage \
release release-passive release-both release-clean release-clean-passive release-clean-both \
dev install uninstall lint fmt mod-update info size docker-build \
quick all all-both help
.PHONY: build-darwin-optimized build-darwin-debug test-macos-optimization
# macOS专用优化构建
build-darwin-optimized: ## 编译macOS优化版本
@echo "[BUILD-DARWIN-OPTIMIZED] 编译macOS优化版本..."
@$(BUILD_SCRIPT) darwin/amd64 --with-macos-optimization
@$(BUILD_SCRIPT) darwin/arm64 --with-macos-optimization
# macOS调试版本
build-darwin-debug: deps ## 编译macOS调试版本 (保留调试信息)
@echo "[BUILD-DARWIN-DEBUG] 编译macOS调试版本..."
@mkdir -p $(OUTPUT_DIR)
@CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o $(OUTPUT_DIR)/$(PROJECT_NAME)_darwin_amd64_debug $(MAIN_FILE)
@CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o $(OUTPUT_DIR)/$(PROJECT_NAME)_darwin_arm64_debug $(MAIN_FILE)
# 测试macOS优化效果
test-macos-optimization: clean build-darwin-debug build-darwin-optimized ## 对比macOS优化效果
@echo "[TEST-MACOS] 对比macOS优化效果..."
@echo "=========================================="
@echo "🍎 macOS二进制文件大小对比:"
@echo "=========================================="
@if [ -f "$(OUTPUT_DIR)/$(PROJECT_NAME)_darwin_amd64_debug" ]; then \
DEBUG_SIZE=$$($(call get_file_size,$(OUTPUT_DIR)/$(PROJECT_NAME)_darwin_amd64_debug)); \
echo " 调试版本 (amd64): $$DEBUG_SIZE"; \
fi
@if [ -f "$(OUTPUT_DIR)/$(PROJECT_NAME)_darwin_amd64" ]; then \
OPT_SIZE=$$($(call get_file_size,$(OUTPUT_DIR)/$(PROJECT_NAME)_darwin_amd64)); \
echo " 优化版本 (amd64): $$OPT_SIZE"; \
fi
@if [ -f "$(OUTPUT_DIR)/$(PROJECT_NAME)_darwin_arm64_debug" ]; then \
DEBUG_SIZE=$$($(call get_file_size,$(OUTPUT_DIR)/$(PROJECT_NAME)_darwin_arm64_debug)); \
echo " 调试版本 (arm64): $$DEBUG_SIZE"; \
fi
@if [ -f "$(OUTPUT_DIR)/$(PROJECT_NAME)_darwin_arm64" ]; then \
OPT_SIZE=$$($(call get_file_size,$(OUTPUT_DIR)/$(PROJECT_NAME)_darwin_arm64)); \
echo " 优化版本 (arm64): $$OPT_SIZE"; \
fi
@echo "=========================================="