安装Go二进制文件,保留依赖项/软件包
当我构建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 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