用于检测 CGO 构建的预处理器标志?

Preprocessor flag to detect CGO build?

在我的go文件旁边的一个c文件中,是通过CGO一起编译的,我想通过预处理器检查它是否是通过go编译的。我想这样做是因为,例如,我想用 #ifdef 标志保护 #include _cgo_export.h,因为这样的 header 仅在编译期间存在,我不想要我的编辑器警告它不存在。

documentation 开始:

// #cgo CFLAGS: -DWHATEVER_YOU_WANT_TO_INDICATE_CGO=1
import "C"

(如果您不需要值,则只 -D FOO)或在环境中设置 CGO_CFLAGS

您可以通过 go build -x 查看幕后发生的事情。 对我来说,它在编译 cgo 生成的 _cgo_defun.c 文件时显示 -D GOOS_freebsd -D GOARCH_amd64,但是 only 该文件而 not 到我的自己的 *.c 文件。所以我不认为有任何可用的预定义预处理器标志(并且文档也没有提到任何)。