在Go包中持续设置CGO_CFLAGS?

在Go包中持续设置CGO_CFLAGS?,go,Go,我的Go软件包包含一个.c文件,该文件使用需要设置某些CFLAGS的库。在“go install”的命令行中,我可以使用所需的标志指定CGO\u CFLAGS,一切正常。但是,我希望这样做,以便有人可以“获取”我的包并构建它,而无需传递任何额外的命令行参数 Go打包系统是否提供了一个位置,我可以在其中放置一些类似这样的配置,以指定在安装包时总是需要的一些参数 (我知道在Go源文件中执行#cgo CFLAGS:指令,但请记住,在我的包中有一个.c源文件,因此需要在整个构建过程中设置cgo#CFLA

我的Go软件包包含一个.c文件,该文件使用需要设置某些CFLAGS的库。在“go install”的命令行中,我可以使用所需的标志指定
CGO\u CFLAGS
,一切正常。但是,我希望这样做,以便有人可以“获取”我的包并构建它,而无需传递任何额外的命令行参数

Go打包系统是否提供了一个位置,我可以在其中放置一些类似这样的配置,以指定在安装包时总是需要的一些参数


(我知道在Go源文件中执行
#cgo CFLAGS:
指令,但请记住,在我的包中有一个.c源文件,因此需要在整个构建过程中设置cgo#CFLAGS)

cgo在构建期间将您的#cgo CFLAGS:提取到一个环境变量(传递“-x”标志以进行构建)。如果你去安装-x,你会看到它遵守你的go库中指定的cflags/ldflags。换句话说,只需在Go文件中指定它们就可以了。

cgo在构建过程中将#cgo CFLAGS:提取到环境变量(将“-x”标志传递到Go构建)。如果你去安装-x,你会看到它遵守你的go库中指定的cflags/ldflags。换句话说,只需在Go文件中指定它们就可以了。

为了使用任何C函数,您仍然需要在.Go文件中混合一些cgo,在这些文件中只需声明您的标志,例如:

test.go:

package main

import "fmt"

/*
#cgo CFLAGS: -DTEST
#include <stdio.h>
extern void ACFunction();
*/
import "C"

//export AGoFunction
func AGoFunction() {
        fmt.Println("AGoFunction()")
}

func main() {
        C.ACFunction()
}

将它们放在同一个目录中将使
go build
拾取test.go中定义的标志,并在构建test.c时应用它们。

为了使用任何c函数,您仍然必须将一些cgo混合到.go文件中,在这些文件中只声明您的标志,例如:

test.go:

package main

import "fmt"

/*
#cgo CFLAGS: -DTEST
#include <stdio.h>
extern void ACFunction();
*/
import "C"

//export AGoFunction
func AGoFunction() {
        fmt.Println("AGoFunction()")
}

func main() {
        C.ACFunction()
}

将它们放在同一个目录中,将使
转到build
拾取test.go中定义的标志,并在构建test.c时应用它们。

请注意,即使不包含
\u cgo\u export.h
也可以,只要您不调用
AGoFunction
。在编译当前包目录中的任何c文件时,Go会将CFLAGS传递给编译器。请注意,即使不包含
\u cgo\u export.h
,只要不调用
AGoFunction
。Go在编译当前包目录中的任何c文件时,都会将CFLAG传递给编译器。@Erikw谢谢,我不知何故认为.Go文件中的选项没有应用于.c文件,但你说得很对。@Erikw谢谢,我不知怎的认为.go文件中的选项没有应用于.c文件,但你说得很对。