【发布时间】:2015-04-26 22:20:15
【问题描述】:
假设我想使用一些很棒的 go 包。我可以通过以下方式包含它:
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 语句压缩了我告诉它使用的内容......
【问题讨论】:
-
使用
godep、nut或类似工具提供软件包并在您的版本中编辑构建标志可能是最简单的,虽然有点令人难过。 (无论如何,这对供应商来说很常见,因此您只能在需要时进行升级。)可能您可以传递 Go env varCC=some_batchfile.bat(或 CXX= 如果正在调用 C++ 编译器)并在您的参数中替换该文件想要,但即使它有效,那也几乎太痛苦了。 (通过供应商,至少您的更改流程类似于其他人已经为依赖管理所做的流程。) -
fork 项目,更改源代码,去获取 fork 的 repo :)