【发布时间】:2014-07-27 00:08:14
【问题描述】:
文档没有说明 build 与 install 的作用
我的期望是它就像make install;即它把编译好的东西放到它的最终位置(/usr/local/bin/my_new_toy 或其他),但它似乎把东西放在 GOROOT/bin
我可以告诉去做一个make install - 即把东西放在别处吗?还是我只写一个makefile(请告诉我不)?
【问题讨论】:
标签: go
文档没有说明 build 与 install 的作用
我的期望是它就像make install;即它把编译好的东西放到它的最终位置(/usr/local/bin/my_new_toy 或其他),但它似乎把东西放在 GOROOT/bin
我可以告诉去做一个make install - 即把东西放在别处吗?还是我只写一个makefile(请告诉我不)?
【问题讨论】:
标签: go
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
【讨论】:
go install 也可以构建吗?还是我需要在安装前运行go build?
go install 就足够了,但是它的 exec 文件在bin/ 目录中创建
go install 的用例是什么?据我了解,go build 的结果可以在不同的机器上分发和运行,而go install 需要源代码并在本地安装 go 程序。
如果你想让二进制文件到一个特定的位置,你可以使用环境变量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
【讨论】:
go build -o指定输出文件名
blah.a)到$GOPATH/pkg/。
go env 将显示假定的GOPATH 和所有其他变量