我刚刚将一个Go包放在一起,这个包将会是一个相当大的系统中的一部分,并且包含很多共享包。我能够得到它通过写其Makefile使得编译器叫用-i标志进行编译:我可以制作gotest传递编译器标志吗?
include $(GOROOT)/src/Make.inc
TARG=foobar
GOFILES=\
foobar.go\
foobar:
$(GC) -I$(CURDIR)/../intmath -I$(CURDIR)/../randnum foobar.go
include $(GOROOT)/src/Make.pkg
它编译就好了,并且是一个好孩子,我写了一个全面的测试。然而,当我尝试使用gotest
运行测试,我得到一个编译错误:
$ gotest
rm -f _test/foobar.a
8g -o _gotest_.8 foobar.go foobar_test.go
foobar.go:4: can't find import: intmath
make: *** [_gotest_.8] Error 1
gotest: "C:\\msys\\bin\\sh.exe -c \"gomake\" \"testpackage\" \"GOTESTFILES=foobar_test.go\"" failed: exit status 2
所以,转到文件本身将编译当我使用-I
标志来告诉它在哪里可以找到intmath和randnum包,但gotest
似乎没有使用Makefile。
回答peterSO的问题: foobar.go进口部分看起来是这样的:
import (
"intmath"
"randnum"
"container/vector"
)
而且只要编译正常工作,因为我有-I
标志将编译器。我曾尝试使用相对路径,像这样:
import (
"../intmath"
"../randnum"
"container/vector"
)
但似乎没有工作。
编辑:回答进一步peterSO问题:
GOROOT设置为C:\Go
在那里我有所有的围棋东西目录 - 除了我的源代码 - 安装。我期待的相对路径是相对于在源文件所居住的目录。
我的源树是这个样子:
server/
foobar/
randnum/
intmath/
所以,当我打开一个不同的,更GO-惯用的目录结构,我的直觉是他们安排的同行。
有一些办法,我可以轻推gotest
与需要的标志编译foobar.go?
我试图指定的包中的import语句的路径,但我无法得到它的工作。细节附加到我上面的答案。如果有问题,我正在Windows 7上开发。 –
回答了您的第二轮有帮助的问题。显然,我不知道'..'是否与'$ GOROOT/src'有关,尽管它与源代码所在的目录相关。有没有一些方法,我可以指定我想从我上面的目录和一个向下导入? –
将GOROOT更改为指向我的应用程序目录结构是否无法访问GO标准库包?如果是这样,我是否有义务将我的软件包安装在标准的Go目录结构中? –