是否可以使用"go install"而不是"go test -c"编译测试二进制



我想在需要时构建测试二进制文件(仅当包或其依赖项更改时) - 类似于go installvsgo build.

加快构建测试二进制文件的唯一选项是-i(go test -c -i)。

知道go工具是否支持此功能吗?有没有其他go工具可以做到这一点(我想在go包上使用具有本机支持的工具,而不是像make这样的基于文件的系统)。

Go 之前 1.10

对于 go <1.10,go build不存储包编译的对象文件。go install确实如此。一种解决方案是在正确的包中调用go install。它将遍历所有包依赖项,如果依赖项包中文件的时间戳发生更改,则编译它们,存储目标文件,然后链接它们。 例:

GOBIN="my project build directory" go install ./cmd/mycmd

另一种解决方案是使用-i标志,buildtest命令都支持该标志。

围棋后 1.10

Go 1.10 为执行"智能"缓存的go build添加了新标志。

go build 命令现在完全根据源文件的内容、指定的构建标志和存储在已编译包中的元数据来检测过期的包。修改时间不再被参考或相关。在修改时间由于某种原因(例如,构建标志的更改)具有误导性的情况下,添加 -a 以强制重建的旧建议不再需要:构建现在始终检测何时必须重建包。(如果您另有观察,请提交错误。

有关详细信息,请阅读发行说明。

最新更新