gpt4 book ai didi

go - 如何将 `go install` 放入模块目录中?

转载 作者:行者123 更新时间:2023-12-01 22:45:44 24 4
gpt4 key购买 nike

例如,当我运行这个

GOOS="windows" GOARCH="386" go install ./something
可执行文件将创建于
$GOROOT/bin/$GOOS_$GOARCH/something.exe
我希望在创建可执行文件
path/to/my/module/bin/$GOOS_$GOARCH/something.exe
编辑
为了澄清,我在模块内的交叉编译构建的上下文中提出了这个问题。
我在我的模块中使用这个命令得到了想要的结果。我想避免指定路径。
GOOS="windows" GOARCH="386" go build -o ./bin/$GOOS_$GOARCH/something.exe ./something
那么, go install 是否可以得到相同的结果? ?
设置 GOBIN 会导致错误
GOBIN=$(pwd)/bin GOOS="windows" GOARCH="386" go install ./something
# go install: cannot install cross-compiled binaries when GOBIN is set

最佳答案

不要使用 go install用于交叉编译。使用go build-o旗帜。
Here是关于 GOBIN 的一些历史记录,robpike 发布了一个问题,指出“我设置了 $GOBIN,但安装时 go 工具忽略了它......”
This article提到
“交叉编译时,你应该使用 go build,而不是 go install。这是 go build 优于 go install 的少数情况之一......
这样做的原因是 go install 总是将已编译的包,.a 文件缓存到与源代码的根目录匹配的 pkg/目录中......
这个逻辑也适用于标准库,它位于/usr/local/go/src,因此将被编译到/usr/local/go/pkg/$GOOS_$GOARCH。这是一个问题,因为在交叉编译时,go 工具需要为您的目标重新构建标准库,但二进制发行版预计/usr/local/go 不可写。
使用 go build 而不是 go install 是这里的解决方案,因为 go build 构建,然后丢弃大部分结果(而不是将其缓存以供以后使用),将最终二进制文件留在当前目录中,这很可能由你”

关于go - 如何将 `go install` 放入模块目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63744676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com