如何告诉cgo不要编译文件?

如何告诉cgo不要编译文件?,go,cgo,Go,Cgo,对于一个普通的go文件,我说 // +build !windows 然而,cgo将其解释为c代码以进行编译 那么我必须做什么呢?构建约束必须出现在包声明之前 不正确 package mypackage // +build !windows // #include <header.h> // // ... import "C" // +build !windows package mypackage // #include <header.h> // // ..

对于一个普通的go文件,我说

// +build !windows
然而,cgo将其解释为c代码以进行编译


那么我必须做什么呢?

构建约束必须出现在包声明之前

不正确

package mypackage

// +build !windows

// #include <header.h>
//
// ...
import "C"
// +build !windows

package mypackage

// #include <header.h>
//
// ...
import "C"
package-mypackage
//+建造!窗户
//#包括
//
// ...
输入“C”
正确

package mypackage

// +build !windows

// #include <header.h>
//
// ...
import "C"
// +build !windows

package mypackage

// #include <header.h>
//
// ...
import "C"
/+build!窗户
包我的包
//#包括
//
// ...
输入“C”

你想禁用cgo还是忽略一个文件?据我所知,被指定为C代码的文件默认使用gc或gcc(通过cgo的标志)编译,所以我认为你最好的办法是找出如何告诉gc忽略一个文件,然后在这里应用它。我根本不想处理它(go或gcc)顺便说一句,我无法理解cgo对空行的敏感程度。错过+生成行和包之间的行-忽略生成行。在#cgo行和“C”includes之间添加一行,它(该#cgo)将被忽略-不是OBVIOUS@pm100实际上,它在文档中是这样统计的:@OneOfOne,除非它们是cgo标志的约束-在这种情况下,它们不能有一个空行