2011-07-26 25 views
2

我刚刚将一个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?

回答

1

创建Windows源代码的目录结构:

C:\server 
C:\server\foobar 
C:\server\intnum 

对于intnum.go:

package intnum 

func IntNum() int { 
    return 42 
} 

的Makefile:

include $(GOROOT)/src/Make.inc 
TARG=server/intnum 
GOFILES=\ 
    intnum.go\ 
include $(GOROOT)/src/Make.pkg 

运行:

$ cd c/server/intnum 
$ make install 

对于foobar的。去:

package foobar 

import (
    "math" 
    "server/intnum" 
) 

func FooBar() float64 { 
    return float64(intnum.IntNum()) * math.Pi 
} 

的Makefile:

include $(GOROOT)/src/Make.inc 
TARG=server/foobar 
GOFILES=\ 
    foobar.go\ 
include $(GOROOT)/src/Make.pkg 

运行:

$ cd /c/server/foobar 
$ make install 

安装之后,在intnum.afoobar.a包文件将在$GOROOT\pkg\windows_386\serverC:\Go\pkg\windows_386\server)directory`。

+0

我试图指定的包中的import语句的路径,但我无法得到它的工作。细节附加到我上面的答案。如果有问题,我正在Windows 7上开发。 –

+0

回答了您的第二轮有帮助的问题。显然,我不知道'..'是否与'$ GOROOT/src'有关,尽管它与源代码所在的目录相关。有没有一些方法,我可以指定我想从我上面的目录和一个向下导入? –

+0

将GOROOT更改为指向我的应用程序目录结构是否无法访问GO标准库包?如果是这样,我是否有义务将我的软件包安装在标准的Go目录结构中? –

相关问题