小编典典

go install 有什么作用?

go

文档没有说明buildvsinstall做什么

我的期望是它就像make install; 即它需要编译的东西并放入其最终位置(/usr/local/bin/my_new_toy或其他位置)但它似乎将东西放入GOROOT/bin

我可以告诉去做make install- 即把东西放在别处吗?或者我只是写一个makefile(请告诉我不是)?


阅读 246

收藏
2021-11-29

共2个答案

小编典典

如果要将二进制文件转到特定位置,可以使用环境变量GOBIN

bin/ 目录保存已编译的命令。每个命令都以其源目录命名,但只有最后一个元素,而不是整个路径。也就是说,在 DIR/src/foo/quux 中带有 source 的命令安装在 DIR/bin/quux 中,而不是 DIR/bin/foo/quux 中。foo/ 被剥离,以便您可以将 DIR/bin 添加到您的 PATH 以获取已安装的命令。如果设置了 GOBIN 环境变量,命令将安装到它命名的目录而不是 DIR/bin。

GOBIN=/usr/local/bin/ go install

如果你想每个项目的bin/目录,然后你可以简单地追加项目的路径GOPATH,但你必须在你的代码$project-path/src/,并go install会把所有的二进制文件$project-path/bin

export GOPATH=/dir1:/dir2:/dir3

如果未设置 GOBIN,则 /dir1/src 中的二进制文件最终在 /dir1/bin 中,/dir2/src 中的二进制文件最终在 /dir2/bin 中,依此类推($GOROOT/src 中的二进制文件最终在 $GOROOT 中) /斌)。

你也可以只使用:

go build -o /path/binary-name
2021-11-29
小编典典

go build 对比 go install:

go build只需编译可执行文件并将其移动到目的地。 go install做的多一点。它将可执行文件移动到 $GOPATH/bin并缓存所有导入到 $GOPATH/pkg. 如果源尚未更改,将在下一次编译期间使用缓存。


go build和之后的包树go install

.
├── bin
│   └── hello  # by go install
└── src 
    └── hello
        ├── hello  # by go build
        └── hello.go
2021-11-29