从源代码构建Go项目

6
我该如何从源代码构建Go项目,而不是使用go get domain.com/dir/project命令?例如,我想要从源代码构建github.com/kr/godep而不是使用go get github.com/kr/godep命令。
git clone https://github.com/kr/godep.git
cd godep
GOPATH=/tmp/godep go build

上述命令将导致:
dep.go:4:2: cannot find package "code.google.com/p/go.tools/go/vcs" in any of:
    /usr/local/Cellar/go/1.2/libexec/src/pkg/code.google.com/p/go.tools/go/vcs (from $GOROOT)
    /Users/hanxue/Source/godep/godep/src/code.google.com/p/go.tools/go/vcs (from $GOPATH)
save.go:5:2: cannot find package "github.com/kr/fs" in any of:
    /usr/local/Cellar/go/1.2/libexec/src/pkg/github.com/kr/fs (from $GOROOT)
    /Users/hanxue/Source/godep/godep/src/github.com/kr/fs (from $GOPATH)

注意:go 1.2 已安装在 /usr/local/Cellar/go/1.2 中,并通过链接从 /usr/local/Cellar/go/1.2/bin/go 到 /usr/local/bin/go。

2
你必须手动安装所有依赖项,例如 code.google.com/p/go.tools/go/vcs,并仔细设置 GOPATH。http://code.google.com/p/go-wiki/wiki/GOPATH - Salah Eddine Taouririt
@hanxue 只是好奇,使用 go get 有什么问题吗? - nemo
@nemo 没有问题,事实上这是构建Go项目的最佳方式。我想从源代码构建,以便我可以创建Homebrew公式。 - Hanxue
@hanxue 啊,这就解释了。谢谢你的澄清。 - nemo
1个回答

6

您需要正确配置GOPATH。有时,项目不必检出到它所期望的“子路径”中,但通常情况下是需要的,而且依赖于它的事物也会期望在那里找到它。因此,您可以使用以下命令代替“go get”:

mkdir -p /tmp/go/src
export GOPATH=/tmp/go
cd $GOPATH/src
mkdir -p github.com/kr/godep
cd github.com/kr/godep/..
git clone http://github.com/kr/godep.git
cd godep
go build

现在对于每个依赖项都重复上述操作即可!

cd $GOPATH/src
mkdir -p code.google.com/p/
cd code.google.com/p
hg clone https://code.google.com/p/go.tools/

是的,vcs依赖项在"go.tools"中,并且需要使用hg进行克隆。需要浏览一些网页才能弄清楚。好吧,我想你可以看出为什么手动操作会很烦人。
我会把其余依赖关系留给读者自己去练习,或者你可以直接使用"go get"。 :-)
一个额外的提示可能是你真正需要的:在检出第一个项目后,您可以在该目录中使用"go get"来下载项目的依赖项。如果有一些无法通过"go get"获取的内容,但其依赖关系可以,则这个提示非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接