当我构建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
个文件任何地方。
答案 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 build
和install
之间的区别;
build
构建,install
版本然后安装要由其他版本使用的结果。