覆盖外部包';s cgo编译器和链接器标志?

覆盖外部包';s cgo编译器和链接器标志?,go,cgo,Go,Cgo,假设我想使用一些很棒的围棋包。我可以通过以下方式将其包括在内: import "github.com/really-awesome/project/foobar" 在该项目的foobar.go文件中,它定义了一些cgo指令,如: #cgo windows CFLAGS: -I C:/some-path/Include #cgo windows LDFLAGS: -L C:/some-path/Lib -lfoobar 但是如果我在其他地方安装了foobarC依赖项,我真的需要这些行来说明:

假设我想使用一些很棒的围棋包。我可以通过以下方式将其包括在内:

import "github.com/really-awesome/project/foobar"
在该项目的foobar.go文件中,它定义了一些
cgo
指令,如:

#cgo windows CFLAGS: -I C:/some-path/Include
#cgo windows LDFLAGS: -L C:/some-path/Lib -lfoobar
但是如果我在其他地方安装了
foobar
C依赖项,我真的需要这些行来说明:

#cgo windows CFLAGS: -I C:/different-path/Include
#cgo windows LDFLAGS: -L C:/different-path/Lib -lfoobar
cgo
查找这些依赖项的地方,有没有一种方法可以覆盖或特朗普?现在,我的解决方案是在运行
go get./…
后手动编辑这两行代码,这将获取
github.comreally awesome/project/foobar
代码

注意:我正在使用
MinGw
编译器,尽管我怀疑这是否重要

更新: 我尝试添加标志以进行构建,但无效:

go build -x -gcflags="-I C:/different/include -L C:/different-path/lib -lfoobar"
go build -x -ccflags="-I C:/different/include" -ldflags="-L C:/different-path/lib -lfoobar"

使用
-x
参数,我可以看到标志的打印输出,它们不包括我在命令行上设置的标志。也许外部go包顶部的
#cgo CFLAGS/LDFLAGS
语句挤压了我告诉它要使用的内容…

这是由
#cgo pkgconfig:foobar
所填补的角色。如果库是这样编写的,它将从foobar的pkgconfig定义中获取正确的路径


我意识到这并不是对这个问题的直接回答,而且pkgconfig也不是一个纯windows工具。。。我很想知道是否存在其他解决方案。

您可以通过设置
CGO\u CPPFLAGS
CGO\u LDFLAGS
环境变量来实现这一点

例如,在我的MacBook上,Homebrew安装在
~/.Homebrew
(而不是
/usr/local
)中,因此当我尝试
获取带有本机绑定的
软件包时,它们找不到标题和lib

要修复此问题,我将这两行添加到我的
~/.zshenv
文件中:

export CGO_CPPFLAGS="-I $BREW_HOME/include"
export CGO_LDFLAGS="-L $BREW_HOME/lib"

使用
godep
nut
或类似工具来提供软件包,并编辑版本中的构建标志,这可能是最简单的,尽管有点令人伤心。(这对供应商来说是常见的,所以只有在你想要升级的时候才可以升级。)你可以通过Envava< Cords> Case=“Soad BooCfile”。BAT < /C> >(或者CX= =正在调用C++编译器),并使文件替换为你想要的参数,但即使工作也会很痛苦。(使用vendoring,至少您的更改流程与其他人已经在进行依赖关系管理的流程类似。)分叉项目,更改源,获取分叉回购:)