diff --git a/BUILD.md b/BUILD.md index bf930c6..e23f4e9 100644 --- a/BUILD.md +++ b/BUILD.md @@ -38,10 +38,12 @@ choco install make ### 构建命令 -#### 构建当前平台版本 -```bash -make build -``` +#### 构建全部平台版本(默认) +```bash +make build +``` + +该命令会生成 Windows、Linux 和 macOS 的 amd64 可执行文件。 #### 构建 Linux 版本(用于服务器部署) ```bash @@ -94,16 +96,16 @@ make run ## 构建输出 -构建完成后,`dist` 目录将只包含**单一可执行文件**: - -``` -dist/ -└── home-vue-go.exe # Windows单一可执行文件(包含前后端) -或 -└── home-vue-go # Linux/macOS单一可执行文件(包含前后端) -``` - -**注意**:所有前端文件(HTML、CSS、JavaScript等)都已嵌入到二进制文件中,构建脚本会自动清理dist目录中的前端源文件。 +执行 `make build` 后,`dist` 目录将包含三个平台包: + +``` +dist/ +├── home-vue-go-windows-amd64.exe +├── home-vue-go-linux-amd64 +└── home-vue-go-darwin-amd64 +``` + +所有前端文件(HTML、CSS、JavaScript等)都会分别嵌入三个二进制文件中,构建脚本会自动清理 dist 中的前端源文件。 ## 运行服务器 diff --git a/Makefile b/Makefile index 274c334..9de0eeb 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,9 @@ BINARY_NAME := home-vue-go WINDOWS_TEMP := $(BINARY_NAME)-windows-amd64.exe LINUX_TEMP := $(BINARY_NAME)-linux-amd64 DARWIN_TEMP := $(BINARY_NAME)-darwin-amd64 +ALL_WINDOWS_TEMP := $(BINARY_NAME)-all-windows-amd64.exe +ALL_LINUX_TEMP := $(BINARY_NAME)-all-linux-amd64 +ALL_DARWIN_TEMP := $(BINARY_NAME)-all-darwin-amd64 ifeq ($(OS),Windows_NT) NPM_CMD := npm.cmd @@ -116,17 +119,34 @@ else endif @echo [build] Output: $(DIST_DIR)/$(BINARY_NAME) -ifeq ($(OS),Windows_NT) -build: build-windows -else build: clean frontend - @echo [build] Building current platform package... - @GOPROXY="$(GOPROXY)" CGO_ENABLED=0 $(GO) build -trimpath -ldflags="-s -w" -o $(BINARY_NAME) . + @echo [build] Building Windows amd64 package... +ifeq ($(OS),Windows_NT) + @set "GOPROXY=$(GOPROXY)" && set "CGO_ENABLED=0" && set "GOOS=windows" && set "GOARCH=amd64" && $(GO) build -trimpath -ldflags="-s -w" -o $(ALL_WINDOWS_TEMP) . + @echo [build] Building Linux amd64 package... + @set "GOPROXY=$(GOPROXY)" && set "CGO_ENABLED=0" && set "GOOS=linux" && set "GOARCH=amd64" && $(GO) build -trimpath -ldflags="-s -w" -o $(ALL_LINUX_TEMP) . + @echo [build] Building macOS amd64 package... + @set "GOPROXY=$(GOPROXY)" && set "CGO_ENABLED=0" && set "GOOS=darwin" && set "GOARCH=amd64" && $(GO) build -trimpath -ldflags="-s -w" -o $(ALL_DARWIN_TEMP) . + @if exist $(DIST_DIR) rmdir /s /q $(DIST_DIR) + @mkdir $(DIST_DIR) + @move /y $(ALL_WINDOWS_TEMP) $(DIST_DIR)\$(BINARY_NAME)-windows-amd64.exe >nul + @move /y $(ALL_LINUX_TEMP) $(DIST_DIR)\$(BINARY_NAME)-linux-amd64 >nul + @move /y $(ALL_DARWIN_TEMP) $(DIST_DIR)\$(BINARY_NAME)-darwin-amd64 >nul +else + @GOPROXY="$(GOPROXY)" CGO_ENABLED=0 GOOS=windows GOARCH=amd64 $(GO) build -trimpath -ldflags="-s -w" -o $(ALL_WINDOWS_TEMP) . + @echo [build] Building Linux amd64 package... + @GOPROXY="$(GOPROXY)" CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build -trimpath -ldflags="-s -w" -o $(ALL_LINUX_TEMP) . + @echo [build] Building macOS amd64 package... + @GOPROXY="$(GOPROXY)" CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 $(GO) build -trimpath -ldflags="-s -w" -o $(ALL_DARWIN_TEMP) . @rm -rf $(DIST_DIR) && mkdir -p $(DIST_DIR) - @mv $(BINARY_NAME) $(DIST_DIR)/$(BINARY_NAME) - @chmod +x $(DIST_DIR)/$(BINARY_NAME) - @echo [build] Output: $(DIST_DIR)/$(BINARY_NAME) + @mv $(ALL_WINDOWS_TEMP) $(DIST_DIR)/$(BINARY_NAME)-windows-amd64.exe + @mv $(ALL_LINUX_TEMP) $(DIST_DIR)/$(BINARY_NAME)-linux-amd64 + @mv $(ALL_DARWIN_TEMP) $(DIST_DIR)/$(BINARY_NAME)-darwin-amd64 + @chmod +x $(DIST_DIR)/$(BINARY_NAME)-linux-amd64 $(DIST_DIR)/$(BINARY_NAME)-darwin-amd64 endif + @echo [build] Output: $(DIST_DIR)/$(BINARY_NAME)-windows-amd64.exe + @echo [build] Output: $(DIST_DIR)/$(BINARY_NAME)-linux-amd64 + @echo [build] Output: $(DIST_DIR)/$(BINARY_NAME)-darwin-amd64 dist: build @@ -145,9 +165,12 @@ ifeq ($(OS),Windows_NT) @if exist $(WINDOWS_TEMP) del /f /q $(WINDOWS_TEMP) @if exist $(LINUX_TEMP) del /f /q $(LINUX_TEMP) @if exist $(DARWIN_TEMP) del /f /q $(DARWIN_TEMP) + @if exist $(ALL_WINDOWS_TEMP) del /f /q $(ALL_WINDOWS_TEMP) + @if exist $(ALL_LINUX_TEMP) del /f /q $(ALL_LINUX_TEMP) + @if exist $(ALL_DARWIN_TEMP) del /f /q $(ALL_DARWIN_TEMP) else @rm -rf $(DIST_DIR) - @rm -f $(BINARY_NAME) $(BINARY_NAME).exe $(WINDOWS_TEMP) $(LINUX_TEMP) $(DARWIN_TEMP) + @rm -f $(BINARY_NAME) $(BINARY_NAME).exe $(WINDOWS_TEMP) $(LINUX_TEMP) $(DARWIN_TEMP) $(ALL_WINDOWS_TEMP) $(ALL_LINUX_TEMP) $(ALL_DARWIN_TEMP) endif @echo [clean] Done. diff --git a/README.md b/README.md index 1be2f5b..b3b62b1 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,13 @@ make build-linux make build-windows ``` +**构建全部平台:** +```bash +make build +``` + +该命令会生成 Windows、Linux 和 macOS amd64 可执行文件;需要单独构建某个平台时使用对应的 `make build-windows`、`make build-linux` 或 `make build-darwin`。 + **构建前端:** ```bash npm install