My Go软件包包含一个.c文件,该文件使用需要某些CFLAGS集的库。在“go install”的命令行中,我可以使用所需的标志指定CGO_CFLAGS
,一切正常。但是,我想这样做,以便有人可以“获取”我的包并构建它而不传递任何额外的命令行参数。
Go包装系统是否提供了我可以放置这样的配置的地方,以指定在go install
包裹时总是需要的一些参数?
(我知道在Go源文件中执行#cgo CFLAGS:
指令,但回想一下,在我的包中我有一个.c源文件,所以需要CGO_CFLAGS设置到整个构建过程)
答案 0 :(得分:6)
cgo 在构建期间将 #cgo CFLAGS:提取到环境变量中(将“-x”标志传递给 go build )。如果您去安装-x ,您会看到它尊重您在Go库中指定的cflags / ldflags。换句话说,它应该只在Go文件中指定它们。
答案 1 :(得分:0)
为了使用你的任何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()
}
test.c的:
#include "_cgo_export.h"
void ACFunction() {
#ifdef TEST
printf("ACFunction()\n");
#endif
AGoFunction();
}
将它们放在同一目录中将使go build
获取test.go中定义的标志,并在构建test.c时应用它们。