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

时间:2014-11-18 08:39:21

标签: go

当我构建Go二进制文件时,我通常会这样做:

go build -ldflags "-X main.basedir somevar" -o mybuilddir/bin/myfile mypackage/main"

这会构建二进制文件并将其放在自定义目录中。但这并不能保持"中间"将文件打包在pkg/下面,这将加快下一次编译运行。

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

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

  • 自定义目录
  • 自定义名称(不是main
  • 保留中间生成的包文件(.a

这是src的{​​{1}}目录:

GOPATH

使用GOPATH/src$ tree . └── mypackage ├── packagea │   └── packagea.go ├── packageb │   └── packageb.go └── main    └── mypackage.go ,在go install创建包文件.a),$GOPATH/pkg,我无法找到go build个文件任何地方。

1 个答案:

答案 0 :(得分:5)

2017年11月更新:Go 1.10(2018年第一季度)将为go build添加缓存并安装:请参阅" go build rebuilds unnecessarily"。


原始答案(2014)

  

使用go install,在.a创建包文件$GOPATH/pkg),go build,我无法找到.a个文件任何地方。

如" How does the go build command work ?"

中所述
  

最后一步是将目标文件打包到链接器和编译器使用的归档文件.a中。

     

因为我们在包上调用了go build,所以在构建完成后删除$WORK时会丢弃结果
  如果我们调用go install -x输出中会出现另外两行

mkdir -p /home/dfc/go/pkg/linux_arm/crypto/
cp $WORK/crypto/hmac.a /home/dfc/go/pkg/linux_arm/crypto/hmac.a
  

这表明了go buildinstall之间的区别;

     
      
  • build构建,
  •   
  • install版本然后安装要由其他版本使用的结果。
  •