如何在子目录中构建go项目的C依赖项

如何在子目录中构建go项目的C依赖项,go,build-dependencies,cross-language,Go,Build Dependencies,Cross Language,我正在为Go中的C库编写Go包装器。问题是,C库在许多Linux发行版上都不可用,因此我想要一个解决方案,即“获取github.com/me/mylibrary”不需要任何人安装库 一种解决方案是将库的源代码添加到子目录中。然后,当我的项目用go-get构建时,我也需要自动构建这个库。但我不知道如何实现自动化 或者我可以有一个脚本来下载源代码,提取并构建它 但我不知道如何将这些构建步骤与go构建工具连接起来 链接静态库也不是最容易的 #cgo linux LDFLAGS: ./MyLib/lib

我正在为Go中的C库编写Go包装器。问题是,C库在许多Linux发行版上都不可用,因此我想要一个解决方案,即“获取github.com/me/mylibrary”不需要任何人安装库

一种解决方案是将库的源代码添加到子目录中。然后,当我的项目用go-get构建时,我也需要自动构建这个库。但我不知道如何实现自动化

或者我可以有一个脚本来下载源代码,提取并构建它

但我不知道如何将这些构建步骤与go构建工具连接起来

链接静态库也不是最容易的

#cgo linux LDFLAGS: ./MyLib/lib/libMyLib.a -lstdc++ -lm -lX11
只要我从我的库中构建,它就可以工作,但只要我想从另一个项目中构建,相对路径就来自该项目,而不是我的库,因此它将失败。

根据

当Go工具看到一个或多个Go文件使用特殊导入时 “C”,它将在目录中查找其他非Go文件并编译 作为围棋套餐的一部分。任何.c、.s或.s文件都将被删除 用C编译器编译。任何.cc、.cpp或.cxx文件都将被删除 用C++编译的.< /p>
因此,您可以在存储库中包含C库源代码,go将自动构建它。该页还解释了如何将构建标志传递给编译器,以及可能需要知道的任何其他信息。

到目前为止,我已经知道了这一点,但我想包装的库不仅仅是几个文件。它有自己的makefile,我想使用这些。此外,我不想将我的代码与库的代码混为一谈,以防库在将来发生更改。然后,您必须创建自己的Makefile,为使用go的最终链接准备其他项目