Могу ли я сделать флаги компилятора gotest pass? - PullRequest
2 голосов
/ 27 июля 2011

Я только что собрал пакет 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

Он отлично компилируется, и, будучи хорошим мальчиком, я написал полный набор тестов. Однако, когда я пытаюсь запустить тесты с 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

Итак, сам файл Go будет компилироваться, когда я использую флаги -I, чтобы указать ему, где искать пакеты intmath и randnum, но gotest, похоже, не использует Makefile.

Отвечая на вопрос peterSO: Раздел импорта foobar.go выглядит так:

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

И компиляция работает нормально, пока у меня есть флаги -I, идущие к компилятору. Я пытался использовать относительные пути, как это:

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

но это, похоже, не работает.

РЕДАКТИРОВАТЬ: отвечая на дальнейшие вопросы peterSO:

GOROOT установлен в C:\Go каталог, в котором у меня установлены все компоненты Go - кроме моего исходного кода -. Я ожидал, что относительный путь будет относительно каталога, в котором находится исходный файл.

Мое исходное дерево выглядит так:

server/
    foobar/
    randnum/
    intmath/

Итак, хотя я открыт для другой, более идиоматической структуры каталогов, мой инстинкт состоит в том, чтобы упорядочить их как одноранговые.

Можно ли как-нибудь подтолкнуть gotest к компиляции foobar.go с необходимыми флагами?

1 Ответ

1 голос
/ 27 июля 2011

Создание структуры каталогов исходного кода 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.go:

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.aи foobar.a файлы пакета будут находиться в каталоге $GOROOT\pkg\windows_386\server (C:\Go\pkg\windows_386\server )`.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...