使用方式

  1. $ gf build -h
  2. USAGE
  3. gf build ARGUMENT [OPTION]
  4. ARGUMENT
  5. FILE building file path
  6. OPTION
  7. -n, --name output binary name
  8. -v, --version output binary version
  9. -a, --arch output binary architecture, multiple arch separated with ','
  10. -s, --system output binary system, multiple os separated with ','
  11. -o, --output output binary path, used when building single binary file
  12. -p, --path output binary directory path, default is './bin'
  13. -e, --extra extra custom "go build" options
  14. -m, --mod like "-mod" option of "go build", use "-m none" to disable go module
  15. -c, --cgo enable or disable cgo feature, it's disabled in default
  16. -/--pack pack specified folder into temporary go file before building and removes it after built
  17. -h, --help more information about this command
  18. EXAMPLE
  19. gf build main.go
  20. gf build main.go --pack public,template
  21. gf build main.go --cgo
  22. gf build main.go -m none
  23. gf build main.go -n my-app -a all -s all
  24. gf build main.go -n my-app -a amd64,386 -s linux -p .
  25. gf build main.go -n my-app -v 1.0 -a amd64,386 -s linux,windows,darwin -p ./docker/bin
  26. DESCRIPTION
  27. The "build" command is most commonly used command, which is designed as a powerful wrapper for
  28. "go build" command for convenience cross-compiling usage.
  29. It provides much more features for building binary:
  30. 1. Cross-Compiling for many platforms and architectures.
  31. 2. Configuration file support for compiling.
  32. 3. Build-In Variables.
  33. PLATFORMS
  34. darwin amd64,arm64
  35. freebsd 386,amd64,arm
  36. linux 386,amd64,arm,arm64,ppc64,ppc64le,mips,mipsle,mips64,mips64le
  37. netbsd 386,amd64,arm
  38. openbsd 386,amd64,arm
  39. windows 386,amd64

仅限于交叉编译使用到GoFrame框架的项目,支持绝大部分常见系统的直接交叉编译。

内置编译变量

build命令自动嵌入编译变量,这些变量用户可自定义,并且在运行时通过gbuild组件获取。使用gf build的项目将会默认嵌入以下变量(参考gf -v):

  • 当前Go版本
  • 当前GoFrame版本
  • 当前Git Commit(如果存在)
  • 当前编译时间

编译配置文件

build支持同时从命令行以及配置文件指定编译参数、选项。GoFrame框架的所有组件及所有生态项目都是使用的同一个配置管理组件,默认的配置文件以及配置使用请参考章节 配置管理。以下是一个简单的配置示例供参考(以config.yaml为例):

  1. gfcli:
  2. build:
  3. name: "gf"
  4. arch: "all"
  5. system: "all"
  6. mod: "none"
  7. pack: ""
  8. version: "v1.0.0"
  9. output: "./bin"
  10. extra: ""

配置选项的释义同命令行同名选项。

名称必须默认值含义示例
name与程序入口go文件同名生成的可执行文件名称。如果是windows平台,那么默认会加上.exe后缀gf
arch当前系统架构编译架构,多个以,号分隔,如果是all表示编译所有支持架构386,amd64,arm
system当前系统平台编译平台,多个以,号分隔,如果是all表示编译所有支持平台linux,darwin,windows
path./bin编译可执行文件存储的目录地址./bin
mod
go build -mod编译选项,不常用none
cgo0是否开启CGO,默认是关闭的。如果开启,那么交叉编译可能会有问题。0
pack
需要打包的目录,多个以,号分隔,生成到packed/data.gopublic,template
version
程序版本,如果指定版本信息,那么程序生成的路径中会多一层以版本名称的目录v1.0.0
output
输出的可执行文件路径,当该参数指定时,namepath参数失效,常用于编译单个可执行文件./bin/gf.exe
extra
额外自定义的编译参数,会直接传递给go build命令
varMap
自定义的内置变量键值对
  1. gfcli:
  2. build:
  3. name: gf
  4. arch: all
  5. system: all
  6. mod: none
  7. cgo: 0
  8. pack: “”
  9. version: v1.0.0
  10. output: “./bin
  11. extra: “”
  12. varMap:
  13. k1: v1
  14. k2: v2

编译时的内置变量可以在运行时通过gbuild构建信息-gbuild 获取。

使用示例

  1. $ gf build
  2. 2020-12-31 00:35:25.562 start building...
  3. 2020-12-31 00:35:25.562 go build -o ./bin/darwin_amd64/gf main.go
  4. 2020-12-31 00:35:28.381 go build -o ./bin/freebsd_386/gf main.go
  5. 2020-12-31 00:35:30.650 go build -o ./bin/freebsd_amd64/gf main.go
  6. 2020-12-31 00:35:32.957 go build -o ./bin/freebsd_arm/gf main.go
  7. 2020-12-31 00:35:35.824 go build -o ./bin/linux_386/gf main.go
  8. 2020-12-31 00:35:38.082 go build -o ./bin/linux_amd64/gf main.go
  9. 2020-12-31 00:35:41.076 go build -o ./bin/linux_arm/gf main.go
  10. 2020-12-31 00:35:44.369 go build -o ./bin/linux_arm64/gf main.go
  11. 2020-12-31 00:35:47.352 go build -o ./bin/linux_ppc64/gf main.go
  12. 2020-12-31 00:35:50.293 go build -o ./bin/linux_ppc64le/gf main.go
  13. 2020-12-31 00:35:53.166 go build -o ./bin/linux_mips/gf main.go
  14. 2020-12-31 00:35:55.840 go build -o ./bin/linux_mipsle/gf main.go
  15. 2020-12-31 00:35:58.423 go build -o ./bin/linux_mips64/gf main.go
  16. 2020-12-31 00:36:01.062 go build -o ./bin/linux_mips64le/gf main.go
  17. 2020-12-31 00:36:03.502 go build -o ./bin/netbsd_386/gf main.go
  18. 2020-12-31 00:36:06.280 go build -o ./bin/netbsd_amd64/gf main.go
  19. 2020-12-31 00:36:09.332 go build -o ./bin/netbsd_arm/gf main.go
  20. 2020-12-31 00:36:11.811 go build -o ./bin/openbsd_386/gf main.go
  21. 2020-12-31 00:36:14.140 go build -o ./bin/openbsd_amd64/gf main.go
  22. 2020-12-31 00:36:17.859 go build -o ./bin/openbsd_arm/gf main.go
  23. 2020-12-31 00:36:20.327 go build -o ./bin/windows_386/gf.exe main.go
  24. 2020-12-31 00:36:22.994 go build -o ./bin/windows_amd64/gf.exe main.go
  25. 2020-12-31 00:36:25.795 done!