为了账号安全,请及时绑定邮箱和手机立即绑定

如何一次构建多个包二进制文件

如何一次构建多个包二进制文件

Go
皈依舞 2022-01-17 16:24:01
我在各个地方都看到过这个问题,答案是“使用 cmd/foo,cmd/bar”类型的文件夹结构。这对我不起作用。这有效:$ du -a8   ./src/cmd/bin1/main.go8   ./src/cmd/bin18   ./src/cmd/bin2/main.go8   ./src/cmd/bin216  ./src/cmd8   ./src/shared/foo/foo.go8   ./src/shared/foo8   ./src/shared24  ./src并构建它:go build ./src/cmd/bin2go build ./src/cmd/bin1但是,我不知道有什么变化:go build ./src/...我可能需要一步构建所有此类二进制文件。这种布局:$ du -a8   ./cmd/bin1/main.go8   ./cmd/bin18   ./cmd/bin2/main.go8   ./cmd/bin216  ./cmd8   ./src/shared/foo/foo.go8   ./src/shared/foo8   ./src/shared8   ./src24  .似乎完全无法使用。go build ...似乎没有任何命令组合可以构建 bin1 或 bin2。我能得到的最好的是go build cmd/bin1/main.go它给了我一个名为'main'的二进制文件。没有帮助。所以,具体和详细,包括go build实际构建单个二进制文件的命令,你是如何做到的?...为什么人们不断给出使用顶级cmd文件夹的默认建议?如果你这样做了,你如何构建这些二进制文件?
查看完整描述

3 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

如果您不想将二进制文件安装到$GOPATH/bin中,您可以做其他开源项目所做的事情,即创建一个脚本。


那里的大多数项目都有用于生成多个二进制文件的 make 文件和构建脚本。


在您的情况下,您可以构建一个脚本来迭代 中的包cmd,并go build在每个包上运行。


cd $GOPATH/someProject

for CMD in `ls cmd`; do

  go build ./cmd/$CMD

done

这导致:


[root@node1 test]# ls $GOPATH/someProject

bin1  bin2  cmd

您可以查看几个热门项目:


Grafana - https://github.com/grafana/grafana/blob/master/build.go

圆环 - https://github.com/coreos/torus/blob/master/Makefile

球童 - https://github.com/mholt/caddy/blob/master/dist/automate.go


查看完整回答
反对 回复 2022-01-17
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

go build帮助:

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

为了在一个目录下构建所有包,您可以运行go install ./.... 您的所有软件包都将被构建和安装(即放在 $GOPATH/bin 下)。

在您的示例中,您将生成两个可执行文件:$GOPATH/bin/bin1$GOPATH/bin/bin2

还有另一种方法是编写一个简单的 Makefile 来做你想做的事。


查看完整回答
反对 回复 2022-01-17
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

命令:

go install ./...

应该在当前目录(即./...)下构建所有二进制文件并将它们放在$GOPATH/bin.


查看完整回答
反对 回复 2022-01-17
  • 3 回答
  • 0 关注
  • 259 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号