2011-07-26 4 views
2

많은 공유 패키지가 포함 된 상당히 큰 시스템에 참여할 Go 패키지를 작성했습니다. 나는 컴파일러가 -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 

그것은 잘 컴파일하고 착한 아이되고, 내가 시험의 종합을 썼다. 나는 intmath 및 randnum 패키지를 어디서 찾을 수 있는지를 이야기하는 -I 플래그를 사용할 때

$ 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 

그래서, 이동이 컴파일 자체 파일 : 나는 gotest으로 테스트를 실행하려고 할 때, 나는 컴파일 오류가 , 그러나 gotest은 Makefile을 사용하지 않는 것 같습니다.

는 peterSO의 질문에 대답 :

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

을 그리고 컴파일러에가는 -I 플래그를 가지고 컴파일은 오랫동안 잘 작동 : foobar.go의 수입 부분은 다음과 같습니다. 나는 다음과 같이 상대 경로를 사용하려고 시도했다.

그러나 작동하지 않는 것 같다.

편집 : 대답 더 peterSO 질문은 : - 내 소스 코드를 제외하고 -

GOROOT은 C:\Go에 내가 가서 물건을 모두 가지고있는 디렉토리를 설정 설치했습니다. 상대 경로가 원본 파일이있는 디렉터리에 상대적이라고 예상했습니다.

내 소스 트리는 다음과 같습니다 : 그래서

server/ 
    foobar/ 
    randnum/ 
    intmath/ 

, 내가 다른, 더 이동 - 관용적 디렉토리 구조에 열려 있는데도, 내 본능은 동료로 배열하는 것입니다.

gotest을 필요한 플래그가있는 foobar.go를 컴파일 할 수있게 해주는 방법이 있습니까?

답변

1

윈도우 소스 코드 디렉토리 구조 만들기 :

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 
intnum.go를 들어

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

을 0

foobar 용.이동 :

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 

실행 : 설치는 intnum.afoobar.a 패키지 파일이 $GOROOT\pkg\windows_386\server (C:\Go\pkg\windows_386\server) directory`에있을 것입니다 후

$ cd /c/server/foobar 
$ make install 

.

+0

import 문에서 패키지 경로를 지정하려고했지만 작동시키지 못했습니다. 세부 사항은 위의 내 대답에 추가됩니다. 그 문제가 있다면 Windows 7에서 개발 중입니다. –

+0

두 번째 유용한 질문에 답변했습니다. 분명히, 나는'..'이'$ GOROOT/src'와 관련이 있다는 것을 모르고 있었지만 소스 코드가 존재하는 디렉토리와 관련이 있습니다. 저와 위의 디렉토리에서 가져 오기를 지정할 수있는 방법이 있습니까? –

+0

GOROOT가 내 응용 프로그램 디렉토리 구조를 가리 키도록 변경하면 GO 표준 라이브러리 패키지에 액세스 할 수 없게됩니까? 그렇다면 표준 Go 디렉토리 구조에 내 패키지를 설치해야합니까? –

관련 문제