Build Go绑定多个库版本?

时间:2015-03-06 14:49:54

标签: go preprocessor gtk3 gtk2

尝试将hiccup使用的go-gtk fork中的GTK3支持与基于GTK2的上游pond合并时,我遇到了一个小go-gtk。< / p>

指定GTK版本的这些cgo pkg-config行必须出现在每个文件中,这样可以防止GTK 2和3共有的绑定存在于公共文件中。

我认为&#34;惯用&#34; hack构建针对多个GTK版本的文件编译是:将公共代码放在foo_common.go文件中,以便它永远不会构建。使用perlbash + sed脚本通过修复foo2.go行并为gtk2添加go build指令,从foo3.go构建foo_common.gocgo pkg-config标签。

1 个答案:

答案 0 :(得分:0)

您可以使用build constrain aka标记来实现这一目标。

首先你必须拆分使用gtk2和gtk3的文件,然后假设你想要gtk3作为默认值(如果你将gtk2作为默认值,我会皱眉):

gtk3.go:

// +build !gtk2

package main

import "fmt"

func main() {
    fmt.Println("gtk3")
}

gtk2.go:

// +build gtk2

package main

import "fmt"

func main() {
    fmt.Println("gtk2")
}

然后测试它:

$ go build; and ./constrains
gtk3
$ go build -tags gtk2; and ./constrains
gtk2