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