簡體   English   中英

Go build忽略文件而不說任何話

[英]Go build ignores files without saying anything

在嘗試構建我的go程序的Windows版本時,我遇到了一些非常奇怪的行為。

我的目錄包含:

foo.go  
foo_windows.go  
foo_windows_test.go  
foo_unix.go  
foo_linux.go  
foo_linux_test.go  
foo_darwin.go  

Windows構建失敗,因為構建忽略了foo_windows.go,出於某種原因。 請注意,任何文件中都沒有// +build注釋。 這是構建文件列表的輸出:

$ GOOS=linux GOARCH=amd64 go list -f '{{.IgnoredGoFiles}}' github.com/foo/
[foo_darwin.go foo_windows.go foo_windows_test.go]

$ GOOS=darwin GOARCH=amd64 go list -f '{{.IgnoredGoFiles}}' github.com/foo/
[foo_linux.go foo_linux_test.go foo_windows.go foo_windows_test.go]

$ GOOS=windows GOARCH=amd64 go list -f '{{.IgnoredGoFiles}}' github.com/foo/
[foo_darwin.go foo_linux.go foo_linux_test.go foo_unix.go foo_windows.go]

顯然最后一項是非常錯誤的。 foo_windows.go不應該被忽略。 請注意,當直接在foo_windows.gofoo.go foo_windows.go中的方法時,windows構建成功,因此它實際上是排除文件,並且該文件包含良好構建所需的所有內容。

在Mac上進行交叉編譯並在Windows機器上正常編譯都會導致文件排除的相同問題,這使我相信文件本身會導致問題,但我不確定它可能是什么。

有誰知道為什么會這樣?

我會回答我自己的問題,並希望它可以幫助別人。

由於未出現的構建錯誤, foo_windows.go未包含在構建中。 具體來說, foo_windows.go包含C代碼,並且因為默認情況下CGO_ENABLED=0 ,所以go沒有嘗試編譯它,它只是看到文件中有C代碼CGO_ENABLED=0除了文件。 設置CGO_ENABLED=1包含構建中的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM