安装Go二进制文件,保留依赖项/软件包

安装Go二进制文件,保留依赖项/软件包,go,Go,当我构建Go二进制文件时,我通常会执行以下操作: go build -ldflags "-X main.basedir somevar" -o mybuilddir/bin/myfile mypackage/main" 这将生成二进制文件并将其放置在自定义目录中。但这并没有将中间包文件保存在pkg/之下,这将加快下一次编译运行 解决方案是go install,但我无法指定输出目录。似乎可以使用GOBIN设置二进制目录,但我无法指定可执行文件的名称always main 这个问题的可能解决方案是

当我构建Go二进制文件时,我通常会执行以下操作:

go build -ldflags "-X main.basedir somevar" -o mybuilddir/bin/myfile mypackage/main"
这将生成二进制文件并将其放置在自定义目录中。但这并没有将中间包文件保存在pkg/之下,这将加快下一次编译运行

解决方案是go install,但我无法指定输出目录。似乎可以使用GOBIN设置二进制目录,但我无法指定可执行文件的名称always main

这个问题的可能解决方案是什么

自定义目标目录 自定义名称不是主名称 保留中间生成的包文件。a 这是GOPATH的src目录:


使用go install,包文件.a是在$GOPATH/pkg中创建的,使用go build,我在任何地方都找不到.a文件。

2017年11月更新:go 1.10 2018年第1季度将为go build和go install添加缓存:请参阅

原始答复2014

使用go install,包文件.a是在$GOPATH/pkg中创建的,使用go build,我在任何地方都找不到.a文件

如中所述

最后一步是将对象文件打包到存档文件.a中,链接器和编译器使用该文件

因为我们在包上调用了go build,所以在生成完成后删除$WORK时,结果将被丢弃。 如果调用go install-x,输出中将显示另外两行

这说明了go build和install之间的区别

建造, 安装生成,然后安装结果以供其他生成使用。
2017年11月更新:Go 1.10 2018年第1季度将为Go构建和Go安装添加缓存:请参阅

原始答复2014

使用go install,包文件.a是在$GOPATH/pkg中创建的,使用go build,我在任何地方都找不到.a文件

如中所述

最后一步是将对象文件打包到存档文件.a中,链接器和编译器使用该文件

因为我们在包上调用了go build,所以在生成完成后删除$WORK时,结果将被丢弃。 如果调用go install-x,输出中将显示另外两行

这说明了go build和install之间的区别

建造, 安装生成,然后安装结果以供其他生成使用。
您是否尝试在go build…之前添加GOPATH=mybuilddir/。。。?正如GOPATH=mybuilddir go build…@VonC中一样,GOPATH被设置,在它的src目录中有一个名为mypackage的目录和一个名为main的子目录,其中.go文件被用作主可执行文件。好的,那么pkg/在哪里创建?我猜不在GOPATH/pkg中?@VonC看到我修改过的问题了吗:使用go安装,.a文件在GOPATH/pkg中,使用go build,则不会创建.a文件。这似乎对我有帮助:您是否尝试在go build之前添加GOPATH=mybuilddir/。。。?正如GOPATH=mybuilddir go build…@VonC中一样,GOPATH被设置,在它的src目录中有一个名为mypackage的目录和一个名为main的子目录,其中.go文件被用作主可执行文件。好的,那么pkg/在哪里创建?我猜不在GOPATH/pkg中?@VonC请看我修改过的问题:使用go安装,.a文件位于GOPATH/pkg中,使用go构建,则不会创建.a文件。这似乎对我有帮助:
GOPATH/src$ tree 
.
└── mypackage
    ├── packagea
    │   └── packagea.go
    ├── packageb
    │   └── packageb.go
    └── main
        └── mypackage.go
mkdir -p /home/dfc/go/pkg/linux_arm/crypto/
cp $WORK/crypto/hmac.a /home/dfc/go/pkg/linux_arm/crypto/hmac.a