覆盖外部包';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,至少您的更改流程与其他人已经在进行依赖关系管理的流程类似。)分叉项目,更改源,获取分叉回购:)