gpt4 book ai didi

go - 我可以让 gotest 通过编译器标志吗?

转载 作者:IT王子 更新时间:2023-10-29 01:46:30 29 4
gpt4 key购买 nike

我刚刚将一个 Go 包放在一起,它将成为一个具有大量共享包的相当大的系统的一部分。我能够通过编写它的 Makefile 来编译它,以便使用 -I 标志调用编译器:

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

它编译得很好,作为一个好 child ,我写了一套全面的测试。但是,当我尝试使用 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 包时,Go 文件本身会编译,但是 gotest 似乎没有使用 Makefile。

回答 peterSO 的问题:foob​​ar.go 的导入部分如下所示:

import (
"intmath"
"randnum"
"container/vector"
)

只要我有 -I 标志进入编译器,编译就可以正常工作。我试过使用相对路径,像这样:

import (
"../intmath"
"../randnum"
"container/vector"
)

但这似乎行不通。

编辑:回答进一步的 peterSO 问题:

GOROOT 设置为 C:\Go 我安装了所有 Go 东西的目录——除了我的源代码之外。我期望相对路径是相对于源文件所在目录的。

我的源代码树是这样的:

server/
foobar/
randnum/
intmath/

因此,虽然我对不同的、更像 Go 惯用的目录结构持开放态度,但我的直觉是将它们安排为对等的。

有什么方法可以促使 gotest 使用所需的标志编译 foobar.go?

最佳答案

创建Windows源代码目录结构:

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

对于 intnum.go:

package intnum

func IntNum() int {
return 42
}

生成文件:

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

运行:

$ cd c/server/intnum
$ make install

对于 foobar.go:

package foobar

import (
"math"
"server/intnum"
)

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

生成文件:

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\server (C:\Go\pkg\windows_386\server) 目录`。

关于go - 我可以让 gotest 通过编译器标志吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6836006/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com