【问题标题】:What does go install do?go install 有什么作用?
【发布时间】:2014-07-27 00:08:14
【问题描述】:

文档没有说明 buildinstall 的作用

我的期望是它就像make install;即它把编译好的东西放到它的最终位置(/usr/local/bin/my_new_toy 或其他),但它似乎把东西放在 GOROOT/bin

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

【问题讨论】:

    标签: go


    【解决方案1】:

    go buildgo install:

    go build 只是编译可执行文件并将其移动到目标位置。 go install 做得更多。它将可执行文件移动到 $GOPATH/bin 并缓存所有导入到的非主包 $GOPATH/pkg。缓存将在下一次编译期间使用,前提是 来源尚未更改。


    go buildgo install 之后的包树:

    .
    ├── bin
    │   └── hello  # by go install
    └── src 
        └── hello
            ├── hello  # by go build
            └── hello.go
    

    More detailed information.

    【讨论】:

    • go install 也可以构建吗?还是我需要在安装前运行go build
    • @RafaelEyng 不,go install 就足够了,但是它的 exec 文件在bin/ 目录中创建
    • 我有一个项目,我在其中键入“go install”,但没有任何反应。没有错误信息,什么都没有。怎么回事?
    • go install 的用例是什么?据我了解,go build 的结果可以在不同的机器上分发和运行,而go install 需要源代码并在本地安装 go 程序。
    【解决方案2】:

    如果你想让二进制文件到一个特定的位置,你可以使用环境变量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指定输出文件名
    • 是的,为了完整起见,我会把它添加到答案中。
    • 所以 go install 和 go build -o $GOPATH/bin/? 一样
    • 或多或少,它还安装了库文件(blah.a)到$GOPATH/pkg/
    • go env 将显示假定的GOPATH 和所有其他变量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2022-12-31
    • 2020-11-22
    • 2016-10-30
    相关资源
    最近更新 更多