用go来做嵌入式开发-交叉编译和自动版本号
2012 年 7 月 28 日
用go来做嵌入式开发-交叉编译和自动版本号
- 嵌入式硬件平台一般是采用arm或者mips等非x86架构,因此需要在编译程序的时候指定目标机器平台
- 有时候需要在go程序中自动生成版本号和编译日期信息,这个在c和c++中很方便实现有__TIME__和__DATE__宏可以实现,那么在go中如何来实现自动插入编译时间和日期啦?
多平台教程编译脚本
- arm平台
@echo off set GOARCH=arm set GOOS=linux set CGO_ENABLED=0 set dd=%date:~8,2% set mm=%date:~5,2% set yy=%date:~0,4% set Tss=%TIME:~6,2% set Tmm=%TIME:~3,2% set Thh=%TIME:~0,2% set Thh=%Thh: =0% set BUILD_VERSION=1.0.5 set BUILD_TIME=%yy%-%mm%-%dd%_%Thh%.%Tmm%.%Tss% set BUILD_NAME=goftpd set BUILD_PATH=bylib/byutils echo %BUILD_NAME%%BUILD_VERSION%%BUILD_TIME% go build -ldflags "-w -s -X %BUILD_PATH%.BuildTime=%BUILD_TIME% -X %BUILD_PATH%.BuildVersion=%BUILD_VERSION% -X %BUILD_PATH%.BuildName=%BUILD_NAME%" -v -o %BUILD_NAME% ::upx -9 %BUILD_NAME% upx %BUILD_NAME%
- mips平台【mt7688,无硬件浮点】
@echo off set GOARCH=mipsle set GOOS=linux set GOMIPS=softfloat set CGO_ENABLED=0 set dd=%date:~8,2% set mm=%date:~5,2% set yy=%date:~0,4% set Tss=%TIME:~6,2% set Tmm=%TIME:~3,2% set Thh=%TIME:~0,2% set Thh=%Thh: =0% set BUILD_VERSION=1.0.5 set BUILD_TIME=%yy%-%mm%-%dd%_%Thh%.%Tmm%.%Tss% set BUILD_NAME=goftpd set BUILD_PATH=bylib/byutils echo %BUILD_NAME%%BUILD_VERSION%%BUILD_TIME% go build -ldflags "-w -s -X %BUILD_PATH%.BuildTime=%BUILD_TIME% -X %BUILD_PATH%.BuildVersion=%BUILD_VERSION% -X %BUILD_PATH%.BuildName=%BUILD_NAME%" -v -o %BUILD_NAME% ::upx -9 %BUILD_NAME% upx %BUILD_NAME%
如何自动生成版本号
- 定义一个包含版本号信息的通用包 ,建立一个version.go的文件
package byutil var ( BuildVersion string BuildTime string BuildName string )
- 在项目中引用该包中的版本号和编译时间变量
var build_info= byutil.BuildVersion+byutil.BuildTime
- 编译的时候通过tag传递当前时间和版本号给byutil包中的相关变量,具体参考第一节中的交叉编译脚本