在当前目录中构建多个二进制文件

问题描述 投票:0回答:4

当从任何目录执行

go build github.com/.../foo
时,编译后的二进制文件将放置在我执行命令的目录中。在执行
go build /github.com/.../cmd/...
时,我希望所有已编译的二进制文件都出现在我的当前目录中。但他们没有。

如何将该包的多个/所有二进制文件编译到我当前的工作目录中?

go build
4个回答
1
投票

正如问题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 =“更改列表”)。


1
投票

您可以使用项目的文件路径(而不是包名称)编译二进制文件,以在当前目录中生成它们。

例如:

$ go build ~/Go/src/github.com/.../cmd

二进制文件将位于您当前的目录中。


0
投票

来自

go build -h

编译多个包或单个非主包时, build 编译包但丢弃生成的对象, 仅用作检查是否可以构建包。

但是你可以使用这一行来达到相同的结果(只会构建直接在 cmd 下的二进制文件):

find $GOPATH/src/github.com/.../cmd -mindepth 1 -maxdepth 1 | xargs -n1 go build


0
投票

试试这个

go build -o main {module-name}/cmd
© www.soinside.com 2019 - 2024. All rights reserved.