文档没有说明build
vs install
做什么
我的期望是它像make install
;即它需要编译的东西并放入其最终位置(/usr/local/bin/my_new_toy
或其他),但似乎它将内容放入GOROOT/bin
我可以告诉你做一个make install
- 即把东西放到其他地方吗?或者我只是写一个makefile(请告诉我没有)?
答案 0 :(得分:26)
如果您希望二进制文件转到特定位置,则可以使用环境变量GOBIN
:
bin /目录包含已编译的命令。每个命令都以。命名 它的源目录,但只有最终元素,而不是整个路径。 也就是说,安装了DIR / src / foo / quux中包含源的命令 DIR / bin / quux,而不是DIR / bin / foo / quux。 foo /被剥离以便你 可以将DIR / bin添加到PATH以获取已安装的命令。 如果 设置GOBIN环境变量,将命令安装到 它命名的目录而不是DIR / bin。
来源:http://golang.org/cmd/go/#hdr-GOPATH_environment_variable
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 / bin)。
来源:https://groups.google.com/forum/#!topic/golang-nuts/-mN8R_Fx-7M
你也可以使用(感谢JimB):
go build -o /path/binary-name
答案 1 :(得分:11)
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