用于检测 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 文件。所以我不认为有任何可用的预定义预处理器标志(并且文档也没有提到任何)。
在我的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 文件。所以我不认为有任何可用的预定义预处理器标志(并且文档也没有提到任何)。