`go build`不必要地重建

Tob*_*obu 2 build go

对于我所拥有的一个小程序(特别是cgo调用)来说,构建和运行是非常缓慢的.我想去缓存二进制文件,以便它只在源更新时重建.我会使用带有%规则的简单Makefile,但语言设计者声称go的构建支持不需要Makefile.

还有另一种我忽略的选择吗?go社区是否更喜欢另一个构建系统,可能是基于哈希的,用于缓存和重用构建产品?

Von*_*onC 6

go build并且go install很快(转到1.10,2018年第一季度)要快得多:请参阅此主题草案文档.

go命令现在维护构建包和其他小元数据(CL 68116CL 75473)的缓存.缓存默认为操作系统定义的用户缓存目录,但可以通过设置移动$GOCACHE.
运行" go env GOCACHE"以查看当前的有效设置.现在,go命令永远不会从缓存中删除任何内容.如果缓存太大,请运行" go clean -cache"而不是删除目录.该命令将保留缓存的log.txt文件.几个星期后,我会要求人们将他们的log.txt文件发布到Github问题,以便我们可以评估缓存大小管理方法.

构建缓存的主要作用是像" go test"和" go build" 这样的命令快速运行并始终执行增量构建,尽可能积极地重用过去的构建步骤.
您不必使用" go test -i"或" go build -i"或" go install"来获得快速增量构建.我们不再需要向新用户传授这些变通方法.一切都会很快.

请注意,go install不会安装指定的软件包的依赖关系:见" 什么是go build建? ".