繁体   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