在Go包中持久设置CGO_CFLAGS?

时间:2014-04-07 16:09:06

标签: go

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

Go包装系统是否提供了我可以放置这样的配置的地方,以指定在go install包裹时总是需要的一些参数?

(我知道在Go源文件中执行#cgo CFLAGS:指令,但回想一下,在我的包中我有一个.c源文件,所以需要CGO_CFLAGS设置到整个构建过程)

2 个答案:

答案 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时应用它们。