当从任何目录执行
go build github.com/.../foo
时,编译后的二进制文件将放置在我执行命令的目录中。在执行 go build /github.com/.../cmd/...
时,我希望所有已编译的二进制文件都出现在我的当前目录中。但他们没有。
如何将该包的多个/所有二进制文件编译到我当前的工作目录中?
正如问题23616所述:
无法构建的事实是违反直觉的go build
当问题 14295“cmd/go: go build 应该能够写入多个可执行文件” 将完成时,您将能够在当前目录中获取多个二进制文件。
但这将适用于 Go 1.13(不是 1.12,所以 2019 年末)
这离工作太近了。我不确定为什么没有。
我们应该在 Go 1.12 中修复它。
显然不能与多个二进制目标一起使用,但隐式的“写入当前目录”应该可以工作,但它什么也不做。-o
对拟议的 CL 进行了一些讨论,以及实施的 CL 被打破的评论
。go build -a std cmd
参见 CL 143139/(CL =“更改列表”)。
您可以使用项目的文件路径(而不是包名称)编译二进制文件,以在当前目录中生成它们。
例如:
$ go build ~/Go/src/github.com/.../cmd
二进制文件将位于您当前的目录中。
来自
go build -h
:
编译多个包或单个非主包时, build 编译包但丢弃生成的对象, 仅用作检查是否可以构建包。
但是你可以使用这一行来达到相同的结果(只会构建直接在 cmd 下的二进制文件):
find $GOPATH/src/github.com/.../cmd -mindepth 1 -maxdepth 1 | xargs -n1 go build
试试这个
go build -o main {module-name}/cmd