英文:
Using gomake/gotest for a package with external dependencies
问题
我有以下的包Makefile:
include ${GOROOT}/src/Make.inc
TARG=gorilla.googlecode.com/hg/gorilla/mux
GOFILES=\
doc.go\
mux.go\
DEPS=\
gorilla.googlecode.com/hg/gorilla/context
include ${GOROOT}/src/Make.pkg
我今天更改了TARG和DEPS,将它们指向了上面显示的Google代码仓库,遵循了这个建议。
问题是:我可以使用goinstall安装该包并安装依赖项,但我无法再使用gotest或gomake;我得到了以下错误(使用Go r59):
moraes@yukon:~/dev/repos/gorilla/gorilla/mux$ gotest
rm -f _test/gorilla.googlecode.com/hg/gorilla/mux.a
make -C gorilla.googlecode.com/hg/gorilla/context install
make: *** gorilla.googlecode.com/hg/gorilla/context: 没有那个文件或目录。 停止。
make: *** [gorilla.googlecode.com/hg/gorilla/context.make] 错误 2
gotest: "/home/moraes/dev/repos/go/go.r59/bin/gomake testpackage GOTESTFILES=mux_test.go" 失败:退出状态 2
我尝试先goinstall依赖项(goinstall gorilla.googlecode.com/hg/gorilla/context
),它在$GOROOT/pkg中正确安装,但是gotest/gomake出现了相同的错误。
我觉得我可能漏掉了一些非常基本的东西。我应该如何继续使用上面的Makefile进行gomake/gotest?这个是否应该完全工作,还是我应该使用不同的Makefile进行开发?
英文:
I have the following package Makefile:
include ${GOROOT}/src/Make.inc
TARG=gorilla.googlecode.com/hg/gorilla/mux
GOFILES=\
doc.go\
mux.go\
DEPS=\
gorilla.googlecode.com/hg/gorilla/context
include ${GOROOT}/src/Make.pkg
I changed TARG and DEPS today to point to the Google code repository as shown above, following this advice.
The problem is: I can goinstall the package and it will install the dependency, but I cannot use gotest or gomake anymore; I get the following error (using Go r59):
moraes@yukon:~/dev/repos/gorilla/gorilla/mux$ gotest
rm -f _test/gorilla.googlecode.com/hg/gorilla/mux.a
make -C gorilla.googlecode.com/hg/gorilla/context install
make: *** gorilla.googlecode.com/hg/gorilla/context: No such file or directory. Stop.
make: *** [gorilla.googlecode.com/hg/gorilla/context.make] Error 2
gotest: "/home/moraes/dev/repos/go/go.r59/bin/gomake testpackage GOTESTFILES=mux_test.go" failed: exit status 2
I tried goinstalling the dependency first (goinstall gorilla.googlecode.com/hg/gorilla/context
), and it installs correctly in $GOROOT/pkg but the same error occurs with gotest/gomake.
I think I'm missing something pretty basic. How should I proceed to use gomake/gotest with the Makefile above? Is this supposed to work at all, or should I use a different one for development?
答案1
得分: 1
goinstall不使用Makefile。相反,它将直接从您的.go文件中解析依赖项。
要指定依赖项,请使用“规范化”的引用注释您的导入行。例如:
import (
gorilla_context "gorilla.googlecode.com/hg/gorilla/context"
...
但是,gomake不会自动解析依赖项,因此您需要手动安装它们。
类似地,对于使用goinstall安装cgo源代码,您可以在注释指令中指定CFLAGS和LDFLAGS。例如:
/*
#cgo CFLAGS: -I/usr/local/include
#cgo LDFLAGS: -L/usr/local/lib -lzmq
#include <zmq.h>
*/
import "C"
英文:
goinstall doesn't use the Makefile at all. Instead, it will parse dependencies directly from your .go files.
To specify dependencies, annotate your import lines with a "normalised" reference to the dependency. eg.
import (
gorilla_context "gorilla.googlecode.com/hg/gorilla/context"
...
gomake doesn't automatically resolve dependencies though, so you'll have to manually install them.
Similarly, for installing cgo source with goinstall, you can specify CFLAGS and LDFLAGS in comment directives. eg.
/*
#cgo CFLAGS: -I/usr/local/include
#cgo LDFLAGS: -L/usr/local/lib -lzmq
#include <zmq.h>
*/
import "C"
答案2
得分: 0
我认为Makefile正在尝试在当前目录中找到文件gorilla.googlecode.com/hg/gorilla/context。另外,为什么你想要在Makefile中指定它,而不是从源文件中导入它呢?
英文:
I think the Makefile is trying to find the file gorilla.googlecode.com/hg/gorilla/context in the current directory. Also, why would you want to specify it in a make file as opposed to importing it from within the Source?
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论